emberjs ember create component bubbling controller ember.js nested-routes

create - Ember.js Cómo obtener el controlador en las necesidades que está anidado controllerName



ember onclick (3)

Quiero usar this.get(''controllers.pack.query''); para obtener App.PackQueryController en App.PackController , pero falló.

Creo que el problema es Ember use pack not pack.query como controllerName cuando intenta obtener el controlador. Aunque puedo obtener el controlador con this.controllerFor(''pack.query'') , pero Ember dice que está obsoleto, use las needs lugar

Al mapa de mi enrutador le gustan a continuación y he definido las needs: [''pack.query''] en 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 } });


Deberías usar la caja de camello, no la notación de puntos para esto.

Su controlador de paquete debe ser

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



Ember.inject.controller() debería usarse para acceder a un controlador. Úselo así:

Ajuste

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

Consiguiendo

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

La respuesta anterior se actualizó para reflejar las needs depreciación en Ember 1.13.5 (publicado el 19 de julio de 2015). He dejado las respuestas anteriores a continuación, pero no debo usarlas a menos que estés usando una versión anterior de Ember.

[DEPRECATED] Accediendo a los controladores anidados desde otros controladores usando las needs :

Establecer needs en el controlador:

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

Luego acceda usando:

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

[DEPRECATED] Accediendo a los controladores anidados desde las rutas:

Idealmente, las actions deben poner en una ruta. Si está utilizando el patrón de needs descrito anteriormente en sus actions en un controlador, considere refactorizar.

Puede acceder a los controladores anidados desde una ruta usando el controllerFor lo siguiente:

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