2014-04-04 15 views
6

Używam Ember Need Api do wywołania metody kontrolera w innym kontrolerze. Jestem w stanie uzyskać instancję kontrolera, ale kiedy jestem nazywając ją metoda zwraca mi ten błąd TypeError: Object [object Object] has no method.Wywołanie metody kontrolerów w innym kontrolerze Ember

ten sposób wzywam go:

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


     } 
    } 
}); 

Jest to sterownik, którego zadaniem chcę zadzwonić pod numer

Cards.AccountInfoController = Ember.Controller.extend({ 


    actions:{ 

     test: function(){ 

      alert(1); 
     } 

    } 

}); 

Jak mogę to rozwiązać?

Odpowiedz

11

test nie jest technicznie metodą, ale akcją lub zdarzeniem. Zamiast tego należy użyć metody send:

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

Thanks to działa .. – mohsinali1317

+0

dla ludzi, którzy potrzebują go do pracy z zagnieżdżonymi folderami, oto rozwiązanie dla niego: http://stackoverflow.com/a/29269015/499700 – poweratom

4

Zgodnie z dokumentacją Ember; utwórz właściwość, która leniwie wyszukuje inny kontroler w kontenerze. Można tego użyć tylko podczas definiowania innego kontrolera.

spuścizna przykład aplikacja Ember:

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

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

nowoczesny przykład aplikacja Ember:

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

Można znaleźć więcej documentation about Ember.inject here

+2

Dla użytkowników krążących po sieci, to ans wer jest najdokładniejszy dla aplikacji z Ember 2.x i nowszych. – efx

Powiązane problemy