在ember中,有一种相当简单的方法可以在hasMany关系中创建和保存记录:
this.get('parent').createRecord({...}); // creates a child
this.get('parent').createRecord({...}); // creates a second child
this.get('parent').save().then(function(parent){ // persists parent
parent.get('children').save(); // persists all children
});
如果我们检查网络流量,我们会看到两个POST请求 - 每个请求一个:
PATCH localhost:3000/parent/123
POST localhost:3000/children/
POST localhost:3000/children/
但是,没有相同的方法可以对DELETE执行相同的操作。我们假设我们通过点击按钮标记了要删除的子模型:
deleteChild: function(child) {
// isDeleted -> false
child.deleteRecord();
// isDeleted -> true
}
我们可以立即说child.save()
,它会触发DELETE localhost:3000/children/1
,但是如果我想要像以前一样(parent.get('children').save();
)批量生成它们,那么将会发生以下情况:
PATCH localhost:3000/parent/123
PATCH localhost:3000/children/2
没有发送DELETE,所以当我重新加载页面时,记录会回来。如果我parent.get('children').removeObject(child)
,则会出现同样的问题。
在我看来,父母的createRecord
应该有这样的等价物:
this.get('parent').deleteRecord(child);
但是没有这样的功能。
注意:我使用的是ember 1.13,ember data 1.13和JSONAPIAdapter / Serializer
更新2: Looks like they fixed this in ember data 2
更新:以下代码或多或少地模拟了所需的功能:
this.get('parent').save().then(function(parent){
parent.get('children').save().then(function(children){
children.canonicalState.forEach(function(child){
if(child.isDeleted()){
child.save();
}
});
});
});
有一些冗余列表解析但它会为每条记录生成正确的请求。请注意,canonicalState不知道新记录。
答案 0 :(得分:0)
this.get('parent').deleteRecord(child);
并且发送DELETE
请求基本上是:
child.destroyRecord();
Which is part of Model API.立即发送DELETE
请求。
如果您想稍后批量删除记录,请为JSONAPI准备后端并实施it is part of how JSONAPI works.
处理PATCH
请求