【问题标题】:backbone backgrid: how to avoid double change event骨干backgrid:如何避免双重变化事件
【发布时间】:2016-10-10 11:56:51
【问题描述】:

我有一个主干/backgrid 可编辑网格,每次我编辑一个单元格时,“更改”事件都会触发两次,我最终会发出两个单独的 PUT 请求。

我知道发生这种情况是因为“更改”事件在我在单元格中编辑它时触发一次,当数据从服务器返回时触发另一个;并且可以通过将{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);
        });
    }
});

【问题讨论】:

    标签: javascript backbone.js backgrid


    【解决方案1】:

    无论wait 选项如何,当模型从服务器同步时,您都不应收到第二次更改事件。

    save 调用中的问题是您没有指定 attributes 哈希,即第一个参数。如果您没有任何要修改的属性,考虑到您正在为更改事件触发保存,可能就是这种情况,您将需要以下内容:

        this.on("change", function (model, options) {
            if (options && options.save === false) return;
            model.save(null, {error: alertMe});
        });
    

    实际发生的情况是,您将 error 设置为模型的属性,并触发了 change 事件。

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2011-12-11
      • 2013-04-29
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多