1

设置:

  • blah 是我的 ember 应用程序
  • find 本质上调用 Ember.$.ajax(url, params, method)
  • find 方法不是阻塞调用
  • 路由和控制器都没有相互依赖(需求)

问题:

  • 我试图弄清楚为什么 ApplicationRoute 中的 setupController(我也尝试过激活)直到我的 ajax 调用从我的 CowRoutes 模型返回之后才被执行。

牛阻止元和用户

我尝试过的事情:

  • 如果我将代码从 setupController 移动到 CowRoute 的模型中,它们都会并行运行(它们根本不属于这里,特别是因为它们是页眉页脚,我可能会在 CowRoute 旁边找到不同的路由)。
  • 我尝试在我的 find 方法上使用 Ember.RSVP.resolve,一切仍然有效,它仍然在串行运行

申请路线

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

牛路

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

2 回答 2

1

我猜 Ember 会尝试execute all model hooks of all Routes available af first。它等待模型挂钩完成before executing all setupController hooks

为什么这有意义?

我们来看看setupController的接口:

setupController: function(controller, model) {
...
}

Ember 将通过模型钩子检索到的模型传递给 setupController 钩子。这就是为什么它必须等待。

但是为什么它要等到你的 CowRoutes 模型钩子再在你的 ApplicationRoute 上运行 setupController 呢?

我想这是因为,您可能会controllerFor(name)在 setupController 内部调用,而 Ember 希望所有模型“就位”。

但我认为这种行为应该不会造成太大伤害,因为模型挂钩只是在通过 URL 输入应用程序以反序列化参数时执行。

注意:这个答案只是我的猜测,但对我来说似乎很有意义。至少它应该朝着正确的方向:-)

于 2013-05-17T08:32:48.733 回答
1

按照惯例,如果您的模型不在 url 中并且跨多个路由,则将它们放在应用程序路由中是理想的;)

于 2013-05-17T14:55:00.797 回答