0

APIからデータを取得するためにember-dataを使用しています(findメソッドのみを使用)。データはサーバーから定期的に更新されます。コミット操作は、ember-data の外部で処理されます。

ただし、属性を変更すると、レコードは としてマークされuncommitted、次のリクエストで更新に失敗します。これは、その状態findである必要があるためです。loaded.saved

loaded.saved属性が変更されるたびにレコードを強制的に残す方法はありますか?

4

1 に答える 1

1

私はこれに漠然と似たようなことをしました。これを試してみてください。テストされていないコード!

DS.Model の init メソッドをオーバーライドし、DS.Model の各属性にオブザーバーを追加します。オブザーバーは、モデルの状態を強制的に「loaded.saved」に戻すコールバックに委任します

App.YourModel = DS.Model.extend({
  init: function(){
    this._super();
    this.eachAttribute(function(attributeName){
      this.addObserver(attributeName, this, this.revertToLoadedSavedState);
    }, this);
  },

  revertToLoadedSavedState: function() {
    //hackity hack
    this.get('stateManager').transitionTo('loaded.saved');
  }
}

それが機能する場合、モデルは継続的に「loaded.saved」状態になります。ただし、エンティティ インスタンスをロードすると、オブザーバーの数が制御不能に増加します。

おそらく、サーバーからの更新を行う前にダーティ モデルを繰り返し処理し、stateManager を使用して各ダーティ インスタンスを強制的に「loaded.saved」状態にすることができます。

于 2013-06-12T17:35:15.423 に答える