説明:
私は自分のプロジェクトに ember-data を使用していますが、変更をコミットせずに、オブジェクトをダーティにし、その状態を意図的に再度クリーンに設定する可能性を中心に展開する質問があります。シナリオは次のとおりです。
経由でオブジェクトをフェッチしたとします。そのオブジェクトbanana = App.Fruit.find('banana');
には「黄色い果実!」という説明が含まれています。XHR ロング ポーリング (または WebSockets) を使用すると、別のユーザーが説明を「おいしい黄色い果物!」に変更したため、オブジェクトの更新されたバージョンを受け取ることがあります。元のオブジェクトをフェッチした後の任意の時点で。
次に、新しく受信したデータを反映するようにオブジェクトを更新します。このために、私はさまざまなアプローチを試しました:
電話してみました
App.Store.load(App.Fruit, new_data);
。まず第一に、このアプローチは機能しません。第二に、これは私が望んでいるものではありません。自分でオブジェクトにコミットされていない変更を加えることもできましたが、この場合、それらを破棄するのは望ましくありません (load()
呼び出しがそれらを上書きすると仮定して)。.set()
オブジェクトのプロパティを新しいデータで更新するために、新しいデータをループして、次のように呼び出してみましたbanana.set('description', new_data.description);
(該当する場合は汚れていません)。これは機能しますが、オブジェクトが汚れた状態のままになります。
オブジェクトを再度クリーン/更新するために -アダプターに変更をコミットさせないでください! - オブジェクトが移動する状態を調べました。これらは(少なくとも):
- ステップ 1: 最初に、オブジェクトは
rootState.loaded.saved
状態にあります。 - ステップ 2: プロパティを呼び出す
.set()
と、それが状態にプッシュされrootState.loaded.updated.uncommitted
ます。 - ステップ 3: 呼び出す
App.store.commit();
と、オブジェクトが状態に戻りますrootState.loaded.saved
。
saved
したがって、オブジェクトの状態をステップ 2 の後に次のように手動で設定しようとしましたbanana.get('stateManager').goToState('saved');
。
ただし、これは機能しません。次にストアが他の理由でコミットすると、この操作によってinFlightDirtyReasons is undefinedエラーが生成されます。
質問:
私の質問は、ダーティ オブジェクトの状態を手動でクリーン (保存) に戻すにはどうすればよいですか?