ダーティ レコードを手動でクリーン状態に送信しようとしています( ember-data を使用してオブジェクトの状態を手動でクリーン (保存) に設定する方法に関連して)。
ember-data の望ましくない使用またはバグが原因で発生している可能性のある何かに出くわしました。
基本的に、私がやっていることは
- 問題のレコードを見つけ、
.set()
記録上の財産、および- レコードを手動で「becameClean」状態に送信します。
App.store.commit();
これは、上記のリンク先の質問に記載されている理由で電話をかけたときに、レコードがコミットされるのを避けるために行われます。
始める前に、レコードがどの状態を通過するかを確認するために、ember-dataenter: function() { console.log(this); console.log(this.get('path')); }
の部分に行を追加しました。DS.State = ...
私はGitHubの最新のプルオフを実行しています。これが私のアプローチです:
ステップ 1)電話App.Fruit.find('banana');
:
console.log(this);
結果:<DS.State:ember1077> { initialState="saved", isLoaded=true, saved=<DS.State:ember1078>, more...}
console.log(this.get('path'));
結果:- 「rootState.empty」
- 「rootState.loading」
- 「rootState.loaded」
- 「rootState.loaded.saved」
ステップ 2)電話App.Fruit.find('banana').set('description', 'Yellow fruit!');
:
console.log(this);
結果:<(subclass of DS.State):ember1084> { dirtyType="updated", childStates=[3], eventTransitions={...}, more...}
console.log(this.get('path'));
結果:- 「rootState.loaded.updated」
ステップ 3)電話App.store.get('defaultTransaction.buckets');
:
- 「更新された」バケットにレコードが表示されます
ステップ 4)電話App.Fruit.find('banana').get('stateManager').send('becameClean');
:
console.log(this);
結果:<DS.State:ember1078> { childStates=[0], eventTransitions={...}, states={...}, more...}
console.log(this.get('path'));
結果:- 「rootState.loaded.saved」
ステップ 5)電話App.store.get('defaultTransaction.buckets');
:
- 「クリーン」バケットにレコードが表示されます
インターミッション:オーケー、ここまではとても良かったです。レコードを正常な状態に送信できたようです。ただし、次のことが起こります。
ステップ 6)電話App.Fruit.find('banana').set('description', 'Even more yellow fruit!');
:
console.log(this);
結果:(なし)
console.log(this.get('path'));
結果:(なし)
ステップ 7)電話App.store.get('defaultTransaction.buckets');
:
- 「クリーン」バケットにレコードが表示されます
問題は、'becameClean' 状態をレコードに送信した後、後でレコードを変更しても、'loaded.saved' 状態のままになることです。
ステップ 2 で新しいサブクラス オブジェクトがDS.State
で作成されたdirtyType="updated"
場合、ステップ 6 でもこれが発生しないのはなぜですか?
.send('becameClean')
私の質問は次のとおりです。これはバグですか、それとも私の使用が望ましくないために機能しませんか?