Iのように定義されたモデルを有する:実行ロールバック
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string')
});
App.Question = DS.Model.extend({
name: DS.attr('string'),
answers: DS.hasMany('answer', {async: true})
});
Iを削除し、モデルを質問回答を追加することを可能成分を有します。コンポーネントに適用およびキャンセルボタンが付いています。ユーザーがキャンセルをクリックすると、すべての変更(回答の追加/削除)を元に戻したかったのです。現在、ロールバックはそのトリックをしません、私はイベントがmodel.reload()を試してみましたが、残りのアダプタを使用していて、それは私のためにもうまくいきませんでした。どのように私はこの状況でロールバックを行うことについて行くことができる任意のアイデア?
残りのアダプタを使用する場合は、私が問題にかなりの秋には、ここで指摘:EmberJS cancel (rollback) object with HasMany
おかげで、ディー
UPDATE:
私が意図した方法をロールバック行うことができませんでしたので、私はこれらのステップを実行した:
1) get all the answers back from the server
2) remove answer association from the question
3) manually add answer association to the question model from data received from server
これはうまくいっているようだ私はこの1つのエラーを私は振り払うことができない取得しています。ここで
が更新進行のjsbinです:http://jsbin.com/uWUmUgE/2/
ここでは、新しい答えを作成してから質問すると、あまりにもロールバックか、それを追加することができます。しかし、あなたは次の手順を実行した場合、あなたは私が直面しています、問題が表示されます。
1) delete an answer
2) add an answer
3) perform rollback
4) add an answer
それは、このエラーがスローされます。 エラー:状態にroot.deleted.uncommittedながら、上のイベントdidSetProperty
を処理しようとしました。 {name:position、oldValue:1、originalValue:1、value:2}で呼び出されます。
ご提供いただけるご理解に感謝いたします。
はWORK-AROUND:
一つの簡単な回避策は、単に削除の答えを隠すためでした。私は、ビットのようにモデルを修正:
App.Answer = DS.Model.extend({
name: DS.attr('string'),
layoutName: DS.attr('string'),
markToDelete: DS.attr('boolean', {default: false})
});
そして、私のロールバック機能は、このロジックを持っていた:
answers.forEach(function (answer) {
if(!answer.get('id')){
//newly created answer models that has not persisted in DB
question.get('answers').removeObject(answer);
answer.deleteRecord();
} else {
answer.rollback();
}
});
こんにちは@Toranが応答してくれてありがとうございます。ロールバックを処理するコンポーネントアクション内からコンテキストを取得しようとすると、コンポーネントインスタンス自体が返されます。あなたはあなたの状況の中で何を得るのですか? –
ああ、申し訳ありませんが、私の例はルート内からです(私はまだコンポーネントを持っていますので、どのように似ているのかわかりません) –