设定:
问题:
我试过的事情
ApplicationRoute
blah.ApplicationRoute = Ember.Route.extend({
// setupController runs If a route handler's context changes
setupController: function () {
this.controllerFor('meta_property').set('model', blah.MetaProperty.find('meta_property'));
this.controllerFor('header').set('model', blah.User.find("user"));
}
CowRoute
blah.CowRoute = blah.Route.extend({
model: function (params) {
//this.controllerFor('meta_property').set('model', blah.MetaProperty.find('meta_property'));
//this.controllerFor('header').set('model', blah.User.find("user"));
return blah.Cow.find('cow', params);
//return Ember.RSVP.resolve(blah.Cow.find('cow', params));
}
答案 0 :(得分:1)
我猜Ember试图execute all model hooks of all Routes available af first
。它等待模型挂钩完成before executing all setupController hooks
。
为什么这有意义?
让我们看一下setupController的接口:
setupController: function(controller, model) {
...
}
Ember将通过模型钩子检索到的模型传递给setupController钩子。这就是它必须等待的原因。
但为什么在ApplicationRoute上运行setupController之前它会等待你的CowRoutes模型钩子?
我想这是因为,您可以在setupController中调用controllerFor(name)
,而Ember希望所有模型都“到位”。
但我认为这种行为不应该受到太大影响,因为只有在通过URL输入App以进行参数反序列化时才会执行模型钩子。
注意:这个答案只是我身边的一个猜测,但它似乎对我有意义。至少它应该是正确的方向: - )
答案 1 :(得分:1)
根据惯例,如果你的模型不在url中并且跨越多个路由,那么理想的是将它们放在应用程序路由中;)