【问题标题】:Backbone model fires "change" event twice骨干模型两次触发“更改”事件
【发布时间】:2013-06-11 09:36:56
【问题描述】:

我大约一周前才开始研究backbonejs,我发现我的模型在从我的视图中听到调用“更改”事件时被保存了两次。

基本上我拥有的是一个用户可以编辑的表格,每当用户更新单元格值时,我想将其推送到服务器,为此我定义了一个“更改”方法,并且每次单元格时我都会调用它更新了。

我面临的问题是 id 模型在调用“更改”事件时被保存了两次。

如果我为 model.save 传递 wait:true,则更改事件被触发三次

我做错了什么,或者我错过了什么?任何帮助将不胜感激

下面是我的代码

var Territory = Backbone.Model.extend({
   initialize: function () {
        Backbone.Model.prototype.initialize.apply(this, arguments);
        this.on("change", function (model, options) {
            if (options && options.save === false) return;
            model.save();
        });
    }
});

var Territories = Backbone.Collection.extend({
    model: Territory,
    url: "js/bookings.json"
});
var territories = new Territories();

var columns = [{
    name: "bookingId",
    label: "ID",
    editable: false,
    cell: Backgrid.IntegerCell.extend({
        orderSeparator: ''
    })
}, {
    name: "bookingTime",
    label: "Time",
    cell: "string"
}, {
    name: "bookingUser",
    label: "Name",
    cell: "string"
}, {
    name: "reserveDate",
    label: "Date",
    cell: "string"
}, {
    name: "bookingEmail",
    label: "Email",
    cell: "string"
}];

var grid = new Backgrid.Grid({
    columns: columns,
    collection: territories

});

grid.listenTo(territories, "change", function () {
    alert(territories.pluck('bookingId'))
});

任何帮助将不胜感激。

【问题讨论】:

  • 此处显示的内容不足以识别您的代码导致更改触发两次的位置。 Backgrid 是您的观点吗?附加到网格的侦听器是否也会针对给定的更改触发两次警报?你实际上在哪里做一些事情来为你的模型设定价值?
  • 添加一个all 事件,然后console.log 输出一些关于正在发生什么事件以及使用什么参数的信息。这可能会帮助您解决问题。

标签: javascript backbone.js backgrid


【解决方案1】:

我的坏事,这两个事件是一个从客户端触发以保存数据,另一个是保存数据后服务器的响应。

【讨论】:

  • 这真的很有用!我有同样的问题。
  • 是的,来自服务器的响应会将 ID 添加到模型中,从而触发更改事件。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2013-01-22
  • 2012-11-02
相关资源
最近更新 更多