Ember:无需等待即可加载模型

时间:2016-01-24 23:26:21

标签: ember.js ember-data

Ember是否有可能加载多个模型而无需等待解析的承诺并仍然使用afterModel钩子?目前,我的代码如下所示:

export default Ember.Route.extend({
  model() {
    return Ember.RSVP.hash({
      imports: this.store.findAll('import', {
        skip: 0,
        limit: 5
      }),

      latestimport: this.store.find('import', 'latest')
    });
  },

  afterModel(model) {
    ...some modifications here...
  }
}

由于使用了Ember.RSVP,页面加载会等待所有承诺在呈现之前解析。我可以在加载模型之前进行页面渲染吗?那么我还可以使用afterModel钩子吗?我的观点是,加载的数据只是辅助信息。我不希望因此而阻止整个渲染过程。我没有在文档中找到任何相关信息,尽管我觉得文档根本没有完整。

2 个答案:

答案 0 :(得分:4)

请使用以下方法:

setupController(controller, model) {
  this._super(controller, model);

  Ember.RSVP.hash({
    imports: this.store.findAll('import', {
      skip: 0,
      limit: 5
    }),

    latestimport: this.store.find('import', 'latest')
  }).then(results => {
    // ...some modifications here...
    controller.set('model', results);
  });
}
  1. 它不应该阻止渲染。
  2. 您仍然可以对数据进行修改。
  3. 您仍然可以使用model.importsmodel.latestimport
  4. 访问模板中的数据

答案 1 :(得分:1)

而不是使用Ember.RSVP.hash包装代码,而只是传递哈希对象

 model() {
    return {
      imports: this.store.findAll('import', {
        skip: 0,
        limit: 5
      }),

      latestimport: this.store.find('import', 'latest')
    })
  },

setupController(controller, model) {
  this._super(controller, model);
  // model.latestimport.then(...)
  // model.imports.then(...)
}