2014-04-04 201 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

相關問題