如何删除Ember.js中模型的hasMany关联中的所有记录

时间:2015-01-10 15:58:05

标签: ember.js ember-data

我有一个锦标赛模型,其中包含与之相关的一系列匹配项。假设我想立刻销毁集合中的所有匹配项,应该怎么做?这是我尝试过的:

var matches = tournament.get('matches').toArray();
for (var i = 0; i < matches.length; i++) {
  matches[i].destroyRecord();
}
tournament.save().then(function(tournament) {
  that.transitionTo('tournaments.setup', tournament); 
});

这个toArray位似乎不正确,但它会阻止修改迭代,因为我迭代它。似乎应该有一种方法可以立即销毁所有这些比赛,然后保存锦标赛。

2 个答案:

答案 0 :(得分:6)

这是完成任务的一点点技巧

tournament.get('matches').invoke("destroyRecord"); // deletes all records in 1 shot

如果您希望将其用作承诺

Ember.RSVP.all(tournament.get('matches').invoke("destroyRecord"))
   .then(function(){
         tournament.save()
          .then(function(tournament) {
            that.transitionTo('tournaments.setup', tournament); 
          });
});

答案 1 :(得分:2)

是的,您不想迭代要删除项目的数组,因此使用toArray()进行的操作是一种有效的方法。根据我的知识,没有destroyAll()或类似功能。

你的问题表明你想破坏比赛,而不仅仅是将它们与锦标赛分开,这意味着每个比赛都要单独销毁。 destroyRecord()函数标记要删除的记录,然后通过适配器保存更改。

通常比赛将通过外键与锦标赛相关联,因此销毁每场比赛应足以将其从锦标赛中移除,并且不需要单独保存锦标赛,除非比赛中还有其他派生属性,例如您需要的统计数据还要保存。