如果Ember完成其ajax请求并且DS.RecordArray完全填满,如何真正找出一次

时间:2013-08-11 00:57:40

标签: ember.js ember-data ajax-request

我可能已经尝试过无数种方式,没有什么是有效的。我的最后一次尝试 - 虽然工作得很好,但有一个丑陋的权衡是:

App.UsersRoute = Em.Route.extend({
  model: function() {
    return App.User.find({}).then(function(response) {
      return response;
    });
  }
});

这个问题 - 我很想知道是它进行同步通话。在返回之前,我的HTML / DOM将无法完成加载。

另一件事我想知道,如果我从find中省略了空对象{} - 实际上会立即调用promise函数。我承诺!

现在我尝试过的其他方法都有以下几点都有缺陷:

  • 在控制器上观察content.lastObject.isLoaded
  • 从Ember.ArrayController实现arrayContentDidChange - 显然这会在数组被填充时多次触发。 -

2 个答案:

答案 0 :(得分:1)

  

我可能已经尝试过无数种方式,但没有什么是有效的。

我不知道你是否曾尝试挂钩路线的afterModel功能,这是一个不久前添加的附加功能,可在rc6中使用:

App.UsersRoute = Em.Route.extend({
  afterModel: function(users, transition) {
    console.log(users.get('length'));
  }
});

有关摘机beforeModelafterModel的更多信息,请参阅here

我还提出了jsbin来玩游戏。

希望它有所帮助。

答案 1 :(得分:-1)

你可以在这里阅读https://github.com/emberjs/data/pull/735 像你这样的问题Ember-data RecordArray isLoaded Status。 您也可以尝试将isUpdating视为假,而不是isLoading