2013-06-14 2 views
3

Я только начал работать над backbonejs около недели назад, и я обнаружил, что моя модель дважды сохраняется при прослушивании вызова «изменить» из моего представления.Магистральная модель запускает событие «change» дважды

В принципе, у меня есть таблица, которую пользователь может редактировать, когда пользователь обновляет значение ячейки, которую я хочу направить на сервер, для которого я определил метод «изменения», и я вызываю его каждый раз, когда ячейка обновляется.

Проблема, с которой я столкнулся, заключается в том, что id-модель сохраняется дважды при вызове события «change».

Если я прохожу ждать: верно для model.save, событие изменения обжигают трижды

я делаю что-то неправильно, или я что-то отсутствует obviuos? Любая помощь будет принята с благодарностью

Ниже мой код

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')) 
}); 

Любая помощь будет принята с благодарностью.

+0

Недостаточно показано здесь, чтобы определить, где ваш код вызывает изменение огня дважды. Является ли Backgrid вашим взглядом? Подключен ли слушатель к сетке, одновременно активируя предупреждение дважды для данного изменения? Где вы на самом деле делаете то, что задает ценности на ваших моделях? – kinakuta

+0

Добавьте событие 'all' и' console.log' внесите некоторую информацию о том, какие события происходят, и с каким параметром. Это может помочь вам решить. – Bart

ответ

4

My BAD, 2 события были уволены от клиента, чтобы сохранить данные, а другой - ответ от сервера после сохранения данных.

+0

Это было действительно полезно! У меня была такая же проблема. – Ale

+0

Да, ответ от сервера добавляет идентификатор к модели, поэтому запускает событие изменения. – zzart