2

モデルの基本的なバックボーン コレクションがあります。

私が作業しているビューには、モデルに関する情報が表示され、編集が可能です。

ビューのレンダリングでは、渡された「id」に基づいてモデルをキャプチャします。

render: function() {

     this.model = myCollection.get(this.options.passedInId);

     // do the render...
}

次に、モデルを更新し、レンダリングを呼び出して更新で再レンダリングするクリックイベントがあります

    updateModel: function() {
        var me = this;

        this.model.set('someFlag', true);

        this.model.save(this.model.toJSON(), {
              success: function(model, resp) {
                 me.render();
              }


    }

私の問題は、コレクションからの get が、変更された「someFlag」プロパティを含まないモデルの別のインスタンスを返す (別の cId が表示される) ときに、レンダリングを介して戻ってくるときです。したがって、ビューが再レンダリングされると、私の編集は表示されません。これを処理するより効率的な方法があるかもしれないことは知っていますが、私の質問はなぜこれが起こるのですか? コレクションから取得したモデルに、そのモデルで行った編集を含める必要はありませんか?

この例の「myCollection」は、編集後の最初の取得と次の取得の間にリセットされている可能性がありますが、ID はまだ存在し、更新のないモデルが 1 つだけ見つかります。

4

1 に答える 1

1

私の問題は、render メソッドと updateModel メソッドの間でコレクションがリセットされていたことです。

これにより、モデルがコレクションと同期しなくなり、問題を修正する必要がありました。リセット時にバインドし、モデルが「新しい」バージョンで更新されるようにするだけで済みました。これをレンダリングに追加しました。

var me = this;  
this.collection.on('reset', function () {
     me.model = this.get(me.model.id);
};
于 2013-03-22T16:26:24.020 に答える