当我在某些hasMany关系上调用deleteRecord()
时,Ember Data会发送(成功)DELETE
请求,但该记录不会从视图中删除。我正在使用render
帮助器显示它,如下所示:
{{render "modules.list" modules}}
有趣的是,Ember Inspector在deleteRecord()
后显示相应的对象为<App.Module:ember1182:null>
且其父对象为null
。但是,它的父级仍显示其hasMany
中的记录(作为<App.Module:ember1182:null>
)当我重新加载页面然后调用deleteRecord()
时,它会按预期从视图中删除。
似乎deleteRecord()
不会从父级hasMany
数组中删除记录。奇怪的是,这在我的代码的其他部分工作正常。我的一个理论是,这与{render}
助手有关,因为无论我在哪里使用,我都有同样的问题,但我不确定这是否是导致问题的原因。
我正在使用最新版本的余烬数据(commit 2511cb1f77
)。
答案 0 :(得分:9)
我找到了解决方案。似乎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();
但是在我看来,这应该由Ember(数据)处理。它似乎是(大部分时间),因为这在我的代码的其他部分工作得很好。所以这种情况很可能是某种边缘情况。任何关于可能发生的事情的想法都非常感激。
答案 1 :(得分:1)
似乎在inverse
关系中设置belongsTo
参数可以修复它,而无需在Ember Data 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'));
}
}
});
对创建的Item
deleteRecord
实例方法的任何进一步调用都会将其从父关系中删除,并从视图中正确删除它。
答案 2 :(得分:0)
这是一个有效的JSBin,它展示了删除项目的一般想法:http://jsbin.com/ucanam/1059/edit
你能发布一个给你问题的例子吗?