2014-04-04 86 views
6

我正在使用Ember的Ne​​ed Api调用另一个控制器中的控制器的方法。我能够得到控制的情况下,但是当我调用它的方法,它返回我这个错误TypeError: Object [object Object] has no method.在另一个控制器中调用控制器方法Ember

这是我特意打电话吧:

Cards.CardsIndexController = Ember.Controller.extend({ 
    needs: 'account_info', 
    actions: { 
     accountInfoStart:function(){ 
       console.log(this.get('controllers.account_info').test()); // error here 


     } 
    } 
}); 

这是我想它的功能控制器致电

Cards.AccountInfoController = Ember.Controller.extend({ 


    actions:{ 

     test: function(){ 

      alert(1); 
     } 

    } 

}); 

我该如何解决?

回答

11

test在技术上不是一种方法,而是一种行为或事件。改为使用send方法:

this.get('controllers.account_info').send('test', arg1, arg2); 
+0

感谢它是工作.. – mohsinali1317

+0

对于谁需要它来工作的人与嵌套的文件夹,这里有一个解决方案:http://stackoverflow.com/a/29269015/499700 – poweratom

4

按照Ember文档;创建一个属性,懒惰地查找容器中的另一个控制器。这只能在定义另一个控制器时使用。

遗留烬应用实例:

App.PostController = Ember.Controller.extend({ 
    accountInfo: Ember.inject.controller() 

    this.get('accountInfo').send('test') 
}); 

现代烬应用实例:

// in an ember app created with ember-cli 
// below snippet would be the app/controllers/post.js file 
import Ember from 'ember'; 
export default Ember.Controller.extend({ 
    appController: Ember.inject.controller('application') 
}); 

你可以找到更多documentation about Ember.inject here

+2

对于用户巡航网站,这ans对于运行Ember 2.x及更高版本的应用程序,这是最准确的。 – efx

相关问题