backbone backgrid:如何避免双变化事件
backbone backgrid: how to avoid double change event
我有一个 backbone/backgrid 可编辑网格,每次我编辑一个单元格时,"change" 事件都会触发两次,我最终发出了两个单独的 PUT 请求。
我知道会发生这种情况,因为当我在单元格中编辑时 "change" 事件会触发一次,当数据从服务器返回时会触发另一次;并且可以通过将 {wait: true}
传递给 save
方法来避免这种行为,但我不知道我需要在哪里重载它。
我的模型声明是这样的:
var Redirects = Backbone.Model.extend({
urlRoot: '/global/redirects',
initialize: function () {
Backbone.Model.prototype.initialize.apply(this, arguments);
this.on("change", function (model, options) {
if (options && options.save === false) return;
model.save({
error: alertMe
});
});
this.on('fetch request', function (e) {
loadingOn(e);
});
this.on('sync error', function (e) {
loadingOff(e);
});
this.on('error', function(e, resp){
alertMe(e, resp);
});
}
});
无论 wait
选项如何,当模型从服务器同步时,您不应收到第二次更改事件。
您的 save
调用中的问题是您没有指定 attributes
散列,即第一个参数。如果您没有任何要修改的属性,考虑到您正在为更改事件触发保存,可能就是这种情况,您将需要以下内容:
this.on("change", function (model, options) {
if (options && options.save === false) return;
model.save(null, {error: alertMe});
});
实际发生的是您将 error
设置为模型的属性,这触发了 change
事件。
我有一个 backbone/backgrid 可编辑网格,每次我编辑一个单元格时,"change" 事件都会触发两次,我最终发出了两个单独的 PUT 请求。
我知道会发生这种情况,因为当我在单元格中编辑时 "change" 事件会触发一次,当数据从服务器返回时会触发另一次;并且可以通过将 {wait: true}
传递给 save
方法来避免这种行为,但我不知道我需要在哪里重载它。
我的模型声明是这样的:
var Redirects = Backbone.Model.extend({
urlRoot: '/global/redirects',
initialize: function () {
Backbone.Model.prototype.initialize.apply(this, arguments);
this.on("change", function (model, options) {
if (options && options.save === false) return;
model.save({
error: alertMe
});
});
this.on('fetch request', function (e) {
loadingOn(e);
});
this.on('sync error', function (e) {
loadingOff(e);
});
this.on('error', function(e, resp){
alertMe(e, resp);
});
}
});
无论 wait
选项如何,当模型从服务器同步时,您不应收到第二次更改事件。
您的 save
调用中的问题是您没有指定 attributes
散列,即第一个参数。如果您没有任何要修改的属性,考虑到您正在为更改事件触发保存,可能就是这种情况,您将需要以下内容:
this.on("change", function (model, options) {
if (options && options.save === false) return;
model.save(null, {error: alertMe});
});
实际发生的是您将 error
设置为模型的属性,这触发了 change
事件。