如果我根据model.save的成功设置模型该怎么办?

时间:2013-09-10 14:03:25

标签: javascript backbone.js

我正在做以下

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()也会发送请求。 / p>

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

1 个答案:

答案 0 :(得分: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/