2014-04-04 20 views
6

Ich benutze Ember's Need Api, um eine Methode eines Controllers in einem anderen Controller aufzurufen. Ich bin in der Lage, die Instanz des Controllers zu bekommen, aber wenn ich es nenne Methode es gibt mir diese Fehlermeldung TypeError: Object [object Object] has no method.Aufrufen einer Controller-Methode in einem anderen Controller Ember

Dies ist, wie ich es nenne:

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


     } 
    } 
}); 

Dies ist der Controller, deren Funktion ich will anrufen

Cards.AccountInfoController = Ember.Controller.extend({ 


    actions:{ 

     test: function(){ 

      alert(1); 
     } 

    } 

}); 

Wie kann ich es lösen?

Antwort

11

test ist technisch keine Methode, sondern eine Aktion oder ein Ereignis. Verwenden Sie stattdessen die send Methode:

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

Dank finden es funktioniert .. – mohsinali1317

+0

Für Menschen, die es brauchen zu arbeiten mit verschachtelten Ordnern, hier ist eine Lösung dafür: http://stackoverflow.com/a/29269015/499700 – poweratom

4

Wie Ember Dokumentation; Erstellen Sie eine Eigenschaft, die nach einem anderen Controller im Container sucht. Dies kann nur beim Definieren eines anderen Controllers verwendet werden.

Vermächtnis ember Anwendungsbeispiel:

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

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

moderne ember Anwendungsbeispiel:

// 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') 
}); 

Sie mehr documentation about Ember.inject here

+2

Für Benutzer, die das Netz kreuzen, dieses ans Dies gilt besonders für Anwendungen mit Ember 2.x und höher. – efx

Verwandte Themen