如何在不首先进入路线的情况下加载模型?
App.UsersRoute = Em.Route.extend({
model: function() {
return ['bob', 'sue', 'tom'];
},
setupController: function(controller, model) {
controller.set('model', model);
}
});
使用
从另一个控制器needs: "users"
和
this.get('controllers.users.content');
只要我先访问UsersRoute,就可以正常工作。
答案 0 :(得分:3)
将其加载到需要它的最顶层路线中,因此:
App.SomeOtherRoute = Em.Route.extend({
setupController: function(controller, model) {
controller.set('model', model);
this.controllerFor('user').set('model', ['bob', 'sue', 'tom']);
}
});
请注意,如果您使用的是ember-data或epf或ajax,那么该模型将是一个承诺。您无法将控制器上的模型设置为承诺,因此您可以这样做:
setupController: function(controller, model) {
controller.set('model', model);
return this.get('store').findAll('user').then(function(users) {
this.controllerFor('users').set('model', users);
});
}
注意在第二个我使用的是UsersController,而不是UserController,因为你似乎想要一个用户集合而不是一个用户。
答案 1 :(得分:2)
上周末我遇到了同样的问题,以下内容对我有用:
App.SomeOtherController = Ember.Controller.extend({
needs: ['users']
});
App.SomeOtherRoute = Ember.Route.extend({
setupController: function( controller, model ){
this._super( controller, model );
controller.set( 'controllers.users.model', ['bob', 'sue', 'tom'] );
}
});
如果它是ajax调用/ ember数据,那么你需要这样的东西:
App.SomeOtherController = Ember.Controller.extend({
needs: ['users']
});
App.SomeOtherRoute = Ember.Route.extend({
setupController: function( controller, model ){
this._super( controller, model );
this.get('store').findAll('user').then(function(users) {
controller.set( 'controllers.users.model', users );
});
}
});
然而,在今天的代码审查期间,一位同事向我指出,如果我需要这样做,我可能错误地构建了我的路线/资源/模型。换句话说,外部路线不应该依赖于内部路线的模型。所以我现在正在考虑返回并重构这一点,以便用户模型是外部路由的模型的一部分,然后我可以在我的内部路由控制器中使用它。