【发布时间】:2016-01-27 01:38:53
【问题描述】:
我正在使用本地存储适配器和 emnber-data,当我销毁具有 hasMany 关系的记录时,我也想销毁所有这些。
以下是模型:
App.Category = DS.Model.extend({
title: DS.attr('string'),
items: DS.hasMany('item')
});
App.Item = DS.Model.extend({
name: DS.attr('string'),
category: DS.belongsTo('category')
});
我有一个名为“destroyCategory”的操作,我在其中尝试了几件事,但无论我尝试什么,我都会感到奇怪。
我试过循环“孩子”,我试过只破坏“父母”,但没有一个按预期工作。我想我只是缺少一些基本的东西,所以感谢您的帮助。
编辑:
好的,我试过了:
deleteItem: function(user_cat) {
this.store.find('category', user_cat.id).then(function(category) {
items = category.get('items');
items.forEach(function(item, index, enumerable) {
item.destroyRecord();
});
category.destroyRecord();
});
而我得到的奇怪之处在于它摧毁了除了一个“儿童”记录之外的所有记录......Wat?
最后更新:
这行得通,但我想知道是否有更好、更惯用的方法:
deleteItem: function(selection) {
this.store.find('category', selection.id).then(function(category) {
items = category.get('items');
items.toArray().forEach(function(item, index, enumerable) {
item.destroyRecord();
});
category.destroyRecord();
});
}
【问题讨论】:
-
你想达到什么目的?我假设您已经在
store中有要从当前controller/model中删除的项目? -
当用户销毁一个父Category时,其中的所有项目也应该被销毁。
-
这些是否已经被持久化到
store?即:您是否做过category.save()或者它们都预先保存? -
我问,因为你处理这两者的方式大不相同。
-
您可以放心地假设它们已被持久化到存储中,在本例中为本地存储。
标签: javascript ember.js ember-data