Emberjs,ember-data,localstorage适配器,destroyRecord和所有hasMany关系

时间:2014-11-18 18:11:52

标签: javascript ember.js ember-data

我正在使用localstorage适配器和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();
 });
}

1 个答案:

答案 0 :(得分:1)

您可以invoke( 'destroyRecord' )关于项目:

deleteItem: function(selection) {
 this.store.find('category', selection.id).then(category => {
   let items = category.get( 'items' );
   items.toArray().invoke( 'destroyRecord' );
   category.destroyRecord();
 });
}