Ember删除hasMany关系中的记录

时间:2015-09-03 14:31:08

标签: ember.js

在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不知道新记录。

1 个答案:

答案 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请求