【问题标题】:Emberjs, ember-data, localstorage adapter, destroyRecord and all hasMany relationsEmberjs、ember-data、localstorage 适配器、destroyRecord 和所有 hasMany 关系
【发布时间】: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


【解决方案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();
 });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多