Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何从hasMany关系中删除一个对象,然后重新刷新它?_Ember.js_Ember Data_Relationship - Fatal编程技术网

Ember.js 如何从hasMany关系中删除一个对象,然后重新刷新它?

Ember.js 如何从hasMany关系中删除一个对象,然后重新刷新它?,ember.js,ember-data,relationship,Ember.js,Ember Data,Relationship,我尝试从关系中删除模型,然后使用pushPayload再次导入它 该关系仅在一侧更新,在另一侧不更新 this.get('store').pushPayload({ folder: { id: 1, name: 'My folder' } }); this.get('store').pushPayload({ item: { id: 2, name: 'My item', parentFolder: 1 } }); var folder

我尝试从关系中删除模型,然后使用
pushPayload
再次导入它

该关系仅在一侧更新,在另一侧不更新

this.get('store').pushPayload({
  folder: {
    id: 1,
    name: 'My folder'
  }
});

this.get('store').pushPayload({
  item: {
    id: 2,
    name: 'My item',
    parentFolder: 1
  }
});

var folder = this.get('store').peekRecord('folder', 1);
var item = this.get('store').peekRecord('item', 2);

console.log('Parent folder id: ', item.get('parentFolder.id'), 'Items length', folder.get('items.length'));
item.get('parentFolder').get('items').removeObject(item);
console.log('Parent folder id: ', item.get('parentFolder.id'), 'Items length', folder.get('items.length'));

this.get('store').pushPayload({
  item: {
    id: 2,
    name: 'My item',
    parentFolder: 1
  }
});
console.log('Parent folder id: ', item.get('parentFolder.id'), 'Items length', folder.get('items.length'));
我希望得到以下输出:

Parent folder id:  1 Items length 1
Parent folder id:  undefined Items length 0
Parent folder id:  1 Items length 1
但我得到了这个:

Parent folder id:  1 Items length 1
Parent folder id:  undefined Items length 0
Parent folder id:  1 Items length 0
问题是最后一个
项目长度


如果要使用
pushPayload
将记录添加回,并且您希望有效负载“赢得”您在本地的关系:

item.get('parentFolder').get('items').removeObject(item);
this.get('store').unloadRecord(item);
this.get('store').pushPayload({
  item: {
    id: 2,
    name: 'My item',
    parentFolder: 1
  }
});

我用注释的方式修改了你的玩法,说明每次推都会发生什么。
push
pushPayload
之间的区别在于后者在将数据规范化为您在此处看到的格式后调用前者


简单的回答是,
文件夹
具有本地状态(删除项目),必须清除该状态才能使服务器更改生效。虽然UnloaderRecord是实现这一点的一种方法,但这是一种意外的副作用,还有很多更好的方法(在我使用
push
的twiddle中显示了一种方法,您也可以使用
pushObject
将删除的项目放回原处)。

它适用于我的示例,但不适用于我的实际应用程序。完全删除模型似乎也有点脏。在任何时候它都没有被用户删除。。。