给出一个看起来像这样的模型:
App.Parent = Ember.Model.extend(
children: DS.attr.hasMany('App.Child')
)
App.Child = Ember.Model.extend(
parent: DS.attr.belongsTo('App.Parent')
)
parent = App.Parent.find(1)
# How do I remove parent and all of it's children?
# This doesn't work since I'm removing elements from an array while iterating it
parent.get('children').forEach( c -> c.deleteRecord() )
parent.deleteRecord()
# Only removing the parent like this won't work either,
# Ember-data generates some strange PUT requests for every child
parent.deleteRecord()
# I guess I could do this, but it feels really awkward and
# wrong to use the adapter directly.
# And it also side-steps transactions making bulk updates impossible
App.store.adapter.deleteRecords(App.store, App.Child, parent.get('children'))
parent.deleteRecord()
App.store.commit()
是否有更直接的方式以及仅删除父级时生成的奇怪PUT请求是什么?
答案 0 :(得分:1)
也许使用toArray()方法http://emberjs.com/api/classes/Ember.ArrayProxy.html#method_toArray应该有效,因为你不再直接修改ManyArray
parent.get('children').toArray().forEach( c -> c.deleteRecord() )
对于子节点上的奇怪PUT请求,这是因为当删除父节点时,ember-data“取消”子节点上的父属性。
答案 1 :(得分:0)
纯JavaScript而不是CoffeeScript,但我认为你将能够转换:
var children = parent.get('children'),
i = children.length;
while (i--) {
children[i].deleteRecord();
}