免責事項:私はこれのjsfiddleを作成しようとしましたが、RESTAdapterの公開ソースがないと、実際に機能させることができませんでした。
子モデルのhasMany配列を持つモデルがあります。この子配列に新しいモデルを追加してサーバーに保存する必要があります。
App.FooModel = DS.Model.extend({
'name': DS.attr('string'),
'bars': DS.hasMany('App.BarModel')
});
App.BarModel = DS.Model.extend({
'name': DS.attr('string'),
});
App.ApplicationController = Ember.Controller.extend({
init: function() {
var foo = App.FooModel.find(101); // -- currently has bars[201, 202, 203]
var newBar = loadFixture( App.BarModel, 204 );
var self = this;
setTimeout( function() { // -- just to be sure our models are loaded before we try this
// foo.currentState: saved
foo.get('bars').addObject(newBar);
// foo.currentState: saved
foo.store.commit(); // -- nothing happens
}, 1000);
}
});
App = Ember.Application.create({
store: DS.Store.create({
revision: 11
})
});
しかし、何も起こりません。親モデルがダーティとしてマークされないため、ストアがコミットを試行することはありません。この関係を親に追加する別の方法はありますか?これはバグですか?
現在の回避策:
foo.get('bars').addObject(newBar);
var save = foo.get('name');
foo.set('name', (save + '!'));
foo.set('name', save); // -- this marks our record as dirty, so a save will actually happen
foo.store.commit();
編集1: ember-dataは、最初に埋め込まれた場合にのみこのデータをシリアル化することを認識しています(https://stackoverflow.com/a/15145803/84762)が、これを処理するためにシリアライザーをオーバーライドしました。私が抱えている問題は、ストアがこの変更を保存しようとさえしないため、シリアライザーに到達することさえないということです。
編集2:これはこのバグと関係があるのではないかと思いますが、同時に、これは誰にとっても機能しないことを意味し、他の誰もこれに遭遇していないとは信じられません。