我正在做以下
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>
为什么会这样? 以及如何避免它?
答案 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});
}
});
}
});