Ember.js deleteRecord不会从hasMany中删除记录

Ember.js deleteRecord不会从hasMany中删除记录,ember.js,ember-data,Ember.js,Ember Data,当我对一些hasMany关系调用deleteRecord()时,余烬数据会发送一个(成功的)DELETE请求,但该记录不会从视图中删除。我使用render辅助工具显示它,如下所示: {{render "modules.list" modules}} 有趣的是,Ember Inspector显示在deleteRecord()之后,相应的对象是,其父对象也是null。但是,它的父级仍然在其hasMany(如)中显示记录。当我重新加载页面,然后调用deleteRecord(),它将按预期从视图中删除

当我对一些hasMany关系调用
deleteRecord()
时,余烬数据会发送一个(成功的)
DELETE
请求,但该记录不会从视图中删除。我使用
render
辅助工具显示它,如下所示:

{{render "modules.list" modules}}
有趣的是,Ember Inspector显示在
deleteRecord()
之后,相应的对象是
,其父对象也是
null
。但是,它的父级仍然在其
hasMany
(如
)中显示记录。当我重新加载页面,然后调用
deleteRecord()
,它将按预期从视图中删除

似乎
deleteRecord()
没有从父级的
hasMany
数组中删除记录。奇怪的是,这在我的代码的其他部分工作得很好。我的一个理论是,这与
{render}
助手有关,因为无论我在哪里使用它,我都有相同的问题,但我不确定这是否是导致问题的原因


我使用的是最新版本的余烬数据(
commit 2511cb1f77
)。

下面是一个正在运行的JSBin,演示了删除项目的一般思路:


你能举一个给你带来问题的例子吗?

我找到了解决办法。似乎
deleteRecord
调用
clearRelationships
,从而将模型的
belongsTo
设置为
null
。但是,它没有清除反向(即,它没有从父对象的
hasMany
关系中删除模型)。下面的代码修复了它

var model = this.get('model');
model.eachRelationship(function(name, relationship){
    if (relationship.kind === "belongsTo") {
        var inverse = relationship.parentType.inverseFor(name);
        var parent  = model.get(name);
        if (inverse && parent) parent.get(inverse.name).removeObject(model);
    }
});
this.get('model').deleteRecord();
this.get('model').save();

然而,在我看来,这应该由EMBE(数据)处理。看起来是这样(大多数时候),因为这在我的代码的其他部分工作得很好。因此,这种情况很可能是某种边缘情况。任何关于可能发生的事情的想法都非常感谢

似乎在
belongsTo
关系中设置
inverse
参数可以修复它,而无需在余烬数据0.14中手动清理关系

App.Item = DS.Model.Extend({
  parent: belongsTo('parent', { inverse: 'items' }) 
});
因此,如果通过其父模型实例化子模型,如下所示:

App.ParentController = Ember.ObjectController.extend({
  actions: {
    add: function() {
      this.get('items').pushObject(this.store.createRecord('item'));
    }
  }
});

对已创建的
删除记录
实例方法的任何进一步调用都会将其从父关系中删除,并将其正确地从视图中删除。

谢谢Jeremy,但我对删除记录的工作原理非常熟悉。事实上,我的设置与你发布的非常相似。不幸的是,由于我的案例涉及到与后端的通信,所以我没有好的方法来整理小提琴。以上是我能给出的最好的描述。在我的例子中,记录似乎没有从父hasMany数组中删除。目前我甚至不知道如何缩小问题的范围。任何关于这方面的建议都会很好!我不熟悉余烬数据,但在调用removeObject后必须保存父对象@斩波器这是必要的吗?最好的猜测是你有两个潜在的反向关系,所以余烬不知道从哪个删除它。。。不过,在这种情况下,由于您正在删除它,理想情况下应该将其从所有中删除。当我迁移到ember cli时,此解决方案不再适用于我,因此我在这里提出了另一个问题:这个答案仍然是我应该尝试的方法吗?谢谢