0

我正在做以下事情

var model = new Backbone.Model; // some new model

内部集合:

this.bind("change", this.onChange);
...... //
onChange: function( model, options ) {
    model.save(null, { 
       error : function() {
          console.log('error');
       },
       success: function() {
          model.set( someNewData );
          console.log('done');
       }
   });
},

在这种情况下,浏览器发送两个更新数据的请求。第一个为model.save(),第二个为model.set()

为什么会这样?通常,当我执行 model.set() 时,它不会将请求发送到服务器。但是当我在侧 model.save() 的成功回调中执行相同操作时,model.set() 也会发送请求。

为什么会这样?以及如何避免它?

4

1 回答 1

1

如果你想阻止change事件被触发,你可以silent: true给方法传递一个选项set

model.set(someNewData, {silent: true});

还有一个演示http://jsfiddle.net/nikoshr/eekdb/6/

如果您想要该事件但仍想取消保存,则可以将自定义选项传递给该set方法。例如,一个fromsuccess属性:

var M = Backbone.Model.extend({
    initialize: function() {
        this.on('change', this.onChange);
    },

    onChange: function (model, options) {        
        if (options && options.fromsuccess)
            return;

        model.save(null, {
            success: function () {
                model.set({
                    data: 'data'
                }, {fromsuccess: true});
            }
        });
    }
});

http://jsfiddle.net/nikoshr/eekdb/7/

于 2013-09-11T07:26:21.707 回答