如何使用jquery.when与ember数据承诺

时间:2015-12-17 09:33:48

标签: jquery ember.js ember-data promise deferred

当多个ember模型完成其保存方法时,我正在尝试触发回调。

var promises = [];
modellist.forEach(function(mymodel){
    promises.push(mymodel.save())
}
$.when.apply(null, promises).done(function () {
    console.log('finished promises');
}
console.log('finished method');

立即执行apply函数。

问题:以下哪项是正确的?

  • 承诺!= ember-promise
  • 承诺!=延期
  • ember-promise!= deferred

2 个答案:

答案 0 :(得分:2)

我是RSVP.hash的忠实粉丝,因为它允许一个对象,而RSVP.all使用一个数组。

如果您想在常规代码中使用它来保存多个模型。

actions: {
   doSomething() {
     Ember.RSVP.hash({
       model1Saved: this.get('model1').save(),
       model2Saved: this.get('model2').save(),
    }).then((hash) => { 
      /* hash.model1Saved and hash.model2Saved are available here */ 
    }, (error) => { 
     /* Deal with error */ 
    });
   }
} 

这很好,因为你不必弄乱阵列索引。

同时返回路线的模型

model() {
return Ember.RSVP.hash({
  posts: this.store.findAll('post'),
  tags: this.store.findAll('tag'),
  categories: this.store.findAll('category'),
});
},

然后在setupController方法中你可以:

setupController(controller, model) {
  this._super(controller, model.posts);
  controller.set('tags', model.tags);
  controller.set('category', model.categories);
}

答案 1 :(得分:0)

我找到了解决方案:

  • Ember.RSVP.all(许诺)。然后(函数(){...})

这在文档中并不容易找到: - (