APIからデータを取得するためにember-dataを使用しています(find
メソッドのみを使用)。データはサーバーから定期的に更新されます。コミット操作は、ember-data の外部で処理されます。
ただし、属性を変更すると、レコードは としてマークされuncommitted
、次のリクエストで更新に失敗します。これは、その状態find
である必要があるためです。loaded.saved
loaded.saved
属性が変更されるたびにレコードを強制的に残す方法はありますか?
APIからデータを取得するためにember-dataを使用しています(find
メソッドのみを使用)。データはサーバーから定期的に更新されます。コミット操作は、ember-data の外部で処理されます。
ただし、属性を変更すると、レコードは としてマークされuncommitted
、次のリクエストで更新に失敗します。これは、その状態find
である必要があるためです。loaded.saved
loaded.saved
属性が変更されるたびにレコードを強制的に残す方法はありますか?
私はこれに漠然と似たようなことをしました。これを試してみてください。テストされていないコード!
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」状態にすることができます。