2013-06-21 7 views
15

Chcę użyć this.get('controllers.pack.query');, aby uzyskać App.PackQueryController w App.PackController, ale nie udało się.Ember.js Jak uzyskać kontroler w potrzebach zagnieżdżonych controllerName

Myślę, że problem jest Ember używać pack nie pack.query jak controllerName gdy próbuje dostać sterownik. Chociaż mogę kontroler przez this.controllerFor('pack.query'), ale Ember mówi, że jest przestarzała, użyj needs zamiast

Mój router mapa lubi poniżej i mam zdefiniowane needs: ['pack.query'] w App.PackController

App.Router.map(function() { 
    this.resource('pack', function() { 
     this.route('index', {path: '/:pack_id'}) 
     this.route('query'); 
    }); 
}); 

App.PackController = Ember.ObjectController.extend({ 
    needs: ['pack.query'], 
    queryPack: function() { 
     var packQueryCtrller = this.get('controllers.pack.query');    

     Ember.debug('packQueryCtrller: ' + packQueryCtrller); 
     //DEBUG: packQueryCtrller: undefined 

     packQueryCtrller.queryPack(); //faild packQuery is undefined 
    } 
}); 

App.PackQueryController = Ember.ArrayController.extend({ 
    queryPack: function (queryKey) { 
     //...do query pack 
    } 
}); 

Odpowiedz

16

Należy użyć wielbłąda case, a nie notacja kropkowa do tego.

Kontroler paczka powinna być

App.PackController = Ember.ObjectController.extend({ 
    needs: ['packQuery'], 
    queryPack: function() { 
    var packQueryCtrller = this.get('controllers.packQuery');    

    Ember.debug('packQueryCtrller: ' + packQueryCtrller); 
    //DEBUG: packQueryCtrller: undefined 

    packQueryCtrller.queryPack(); //faild packQuery is undefined 
    } 
}); 
+1

robi to nie działa po ember-cli 0.2.3. Zobacz odpowiedź @roga dla działającego rozwiązania. –

35

Ember.inject.controller() powinny być wykorzystywane w celu uzyskania dostępu do kontrolera. Używaj go tak:

Ustawianie

... 
myController: Ember.inject.controller('pack'), 
nestedController: Ember.inject.controller('pack/query') 
... 

Uzyskiwanie

... 
this.get('myController'); 
this.get('nestedController'); 
... 

odpowiedź powyżej została zaktualizowana, aby odzwierciedlić needsdeprecation w Ember 1.13.5 (wydany 19 lipca 2015). Zostawiłem stare odpowiedzi poniżej, ale nie powinno się ich używać, chyba że używasz starszej wersji Ember.


[przestarzałe] Dostęp zagnieżdżone kontrolerów z innymi sterownikami za pomocą needs:

Set needs na kontrolerze:

... 
needs: ['pack/query'], 
... 

Potem do niego dostęp za pomocą:

this.get('controllers.pack/query'); 

[przestarzałe] Dostęp zagnieżdżone kontrolerami tras:

Idealnie actions należy umieścić na danej trasie. Jeśli używasz wzoru needs opisanego powyżej w swoim actions na kontrolerze, rozważ refaktoryzację.

można uzyskać dostęp zagnieżdżone kontrolerów z trasy przy użyciu controllerFor tak:

this.controllerFor('pack/query') 
+0

Zaktualizowany ponownie w celu odzwierciedlenia nowych wersji (Ember 1.11.1 i ember-cli 0.2.3) – rog

+0

Dziękuję za to, jest zaskakująco mało informacji na ten temat, a dotarcie do niego wydaje się być kwestią potknięcia się na oślep przez ciemny. –

+0

Zaktualizowano ponownie, aby odzwierciedlić nowszą wersję (Ember 1.13.5), która wprowadziła wycofanie oryginalnej odpowiedzi. – rog

Powiązane problemy