1

次のようなモデルがあるとします。

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 リクエストは何ですか?

4

2 に答える 2

1

ManyArray を直接変更する必要がなくなったため、おそらく toArray() メソッドhttp://emberjs.com/api/classes/Ember.ArrayProxy.html#method_toArrayを使用して動作するはずです

parent.get('children').toArray().forEach( c -> c.deleteRecord() )

子に対する奇妙な PUT リクエストについては、親を削除するときに、ember-data が子の親プロパティを「無効化」するためです。

于 2012-11-15T18:34:55.927 に答える
0

CoffeeScript ではなくプレーンな JavaScript ですが、次のように変換できると思います。

var children = parent.get('children'),
    i = children.length;

while (i--) {
    children[i].deleteRecord();
}
于 2012-11-15T18:18:36.937 に答える