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
}
});
Hay una sintaxis más nueva e inyectada para el mismo caso de uso
accountQueueController: Ember.inject.controller(''account/queue''),
...
this.get(''accountQueueController.model.myProperty'')
fuente: http://discuss.emberjs.com/t/needs-with-nested-controller/8083/6
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'')