7

バックボーンモデルを使用して、サーバーからいくつかの追加のプロパティ("FirstName"や"LastName"など)をフェッチすると仮定すると、次のようなものがあります。

var myModel = new Backbone.Model({ id: 10 });
var myOtherModel = new Backbone.Model({ id: 20 });
$.when(myModel.fetch(), myOtherModel.fetch()).done(function () {
    console.log(myModel.toJSON());
});

出力:

{id:10}

少し後の出力:

{id:10、FirstName: "Joe"、LastName: "Schmo"}

バックボーンの約束には欠陥があるように思われます。返されたjqXHRオブジェクトには、バックボーンが独自のプロセスを完了する前に解決される約束があります。

これは本当ですか?fetch()バックボーンのすべてsetが完了するまで、または少なくともset接続されたハンドラーの前にが発生するまで、によって返される約束が解決されないようにするために実行する必要がある他の何かがありますか?

4

2 に答える 2

6

問題が見つかりました。

フェッチしていたモデルがBackbone.Model.syncを上書きしました。

    sync: function (method, model, options) {
                    // Some stuff
        Backbone.sync(method, model, options); // missing return
    }

return Backbone.sync()約束がすぐに解決されなかったので。約束ではなくても、古いものを黙って受け入れ、ただちに解決されたものとして扱う$.when()、呼び出しのラッピングがなければ、私はこれを捕まえたでしょう。fetch()

于 2012-08-21T15:35:55.770 に答える
-2

フェッチ呼び出しで「成功」コールバックを使用してみませんか?

myModel.fetch({
  success: function () {
    console.log(myModel.toJSON());
  }
});
于 2012-08-21T15:34:08.907 に答える