Ember Ajax调用串行运行

时间:2013-05-16 20:17:40

标签: ajax asynchronous parallel-processing ember.js routes

设定:

  • blah是我的余烬应用
  • 找到基本上叫Ember。$。ajax(url,params,method)
  • find方法不是阻止调用
  • 路由和控制器都没有相互依赖(需求)

问题:

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

Cow blocking meta and user

我试过的事情

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

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

2 个答案:

答案 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中并且跨越多个路由,那么理想的是将它们放在应用程序路由中;)