【问题标题】:calling method from action of controller in emberjs从 emberjs 中控制器的操作调用方法
【发布时间】:2013-10-05 04:44:09
【问题描述】:

例如,我有一个这样的控制器:

App.theController = Ember.ArrayController.extend({
  methodA:funtcion() {},
  actions: {
    methodB:function(){},
    methodC:function(){}
  }
});

我的问题是:

  1. methodB如何调用methodC
  2. methodA如何调用methodB

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    您必须使用this.send([methodName]) 才能正确调用您的方法:

    var App = Ember.Application.create({
      ready: function() {
        console.log('App ready');
        var theController = App.theController.create();
        theController.send('methodC');
      }
    });
    
    App.theController = Ember.ArrayController.extend({
      methodA:function(){
        //How can methodA calling methodB
        this.send('methodB');
        console.log('methodA called');
      },
      actions:{
        methodB:function(){
          //How can methodB calling methodC
          this.send('methodC');
          console.log('methodB called');
        },
        methodC:function(){
          console.log('methodC called');
        }
      }
    });
    

    这里有一个简单的jsbin 作为游乐场。

    希望对你有帮助。

    【讨论】:

    • 不完全相同的问题,但我没有设法更新我的应用程序。我需要调用这些动作,但它们会返回一些东西。见jsbin.com/OreraGE/1/edit可能很简单,但是我这里被卡住了……
    • @sly7_7 目前 AFK 会在我回家后查看 :)
    • @sly7_7,看起来玩动作是一种单向的事情,这意味着没有返回值被传递,为了使它工作更难,你可以直接在对象上和动作散列之外定义方法,并直接使用this.methodC() 调用该方法,看看我的意思:jsbin.com/eBegIPAy/1/edit
    • 感谢您的调查。在挖掘了我们的应用程序代码后,我意识到这是为了测试目的,所以我只是改变了测试的方式。如果我有其他用例,我认为实际上您的解决方法是唯一可行的方法。我认为在切换到这个实现时这是一个假设的权衡。不过我会问@lukemelia,因为我认为这并不罕见。
    • 作为最佳实践,this.send 应该用于处理一些用户/事件生成的“动作”(通常通过 {{action}} 帮助程序隐含)。它不应该用作调用方法的一般方式。如果您需要从非动作上下文调用动作处理程序中的代码,请将其提取到自己的方法中,并从动作处理程序上下文和其他上下文委托给它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多