3

バックボーンでモデルを更新しようとすると、モデルsaveの変更イベントが2回発生します。イベントはこの順序で発生します。

  1. 変化する
  2. リクエスト
  3. 変化する
  4. 同期

ただし、合格する(wait: true)と、最初のchangeイベントのみが発生します。

なぜこれが起こっているのか、そして私がchange通過せずに一度だけ発砲することができる方法を誰かが説明できます(wait: true)か?

2つの変更イベント:

    editItem: function() {
        this.model.save({
            name: "Howard the Duck"
        });
    }

1つの変更イベント:

    editItem: function() {
        this.model.save({
            name: "Howard the Duck"
        }, (wait: true);
    }

擬似コード:

App.Views.Item = Backbone.View.extend({
    initialize: function() {
        this.model.on("change", this.changing, this);
        this.model.on("request", this.requesting, this);
        this.model.on("sync", this.syncing, this);
    },

    events: {
        "click a": "editItem"
    },

    editItem: function() {
        this.model.save({
            name: "Howard the Duck"
        });
    }

    changing: function() {
        console.log("changing");
    },        

    requesting: function() {
        console.log("requesting");
    },

    syncing: function() {
        console.log("syncing");
    }
});
4

1 に答える 1

7

属性を変更しながらモデルを保存するとどうなるかを分解すると、次のようになります。

  1. model.set引数として渡されたデータを使用すると、偽の場合に変更イベント
    がトリガーされますoptions.wait
  2. XHRリクエスト
  3. model.setサーバーから返されたデータが真実であるか、サーバーから返されたデータがモデルが認識していない場合に、変更イベントを
    トリガーしますoptions.wait

サーバーはおそらく、2番目の変更イベントをトリガーする変更されたプロパティを返します。応答を変更するか、イベントのリスニングを制限します

this.model.on("change:name", this.changing, this);

これらのフィドルを比較する

于 2013-01-08T09:33:16.190 に答える