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
将删除的项目放回原处)。它适用于我的示例,但不适用于我的实际应用程序。完全删除模型似乎也有点脏。在任何时候它都没有被用户删除。。。