0

免責事項:私はこれの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:これはこのバグと関係があるのではないかと思います、同時に、これは誰にとっても機能しないことを意味し、他の誰もこれに遭遇していないとは信じられません。

4

2 に答える 2

1

1 対多の関係をモデリングしているようですが、belongsToオプション onが含まれていませんApp.BarModel。このリンクをチェックしてください:

http://emberjs.com/guides/models/defining-models/#toc_one-to-many

App.Post = DS.Model.extend({
    comments: DS.hasMany('App.Comment')
});

App.Comment = DS.Model.extend({
    post: DS.belongsTo('App.Post')
});
于 2013-03-06T14:52:23.497 に答える
0

私が理解しているのは、リレーションシップの機能を使用していませんでしたが、シリアライザーをオーバーライドして、オブジェクトのオブジェクトへembeddedのシリアライゼーションを処理することでした。barsfoo

あなたのバグはおそらくここから来たと思います:あなたの関係が埋め込まれていない場合、fooオブジェクトをダーティとマークする理由はありません。オブジェクトを彼のbars関連付けに追加するとき、変更すべきものは通常、追加foo_idしたオブジェクトのキーであり、bar何もありませんfooAPI に送信するオブジェクトの変更。

于 2013-03-06T10:02:32.723 に答える