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'')