我有一个锦标赛模型,其中包含与之相关的一系列匹配项。假设我想立刻销毁集合中的所有匹配项,应该怎么做?这是我尝试过的:
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
位似乎不正确,但它会阻止修改迭代,因为我迭代它。似乎应该有一种方法可以立即销毁所有这些比赛,然后保存锦标赛。
答案 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()函数标记要删除的记录,然后通过适配器保存更改。
通常比赛将通过外键与锦标赛相关联,因此销毁每场比赛应足以将其从锦标赛中移除,并且不需要单独保存锦标赛,除非比赛中还有其他派生属性,例如您需要的统计数据还要保存。