Подтвердить что ты не робот

Как вызвать событие при сохранении модели Backbone?

Если я правильно выполнил свою домашнюю работу, я пришел к выводу, что у Backbone нет встроенного события сохранить, которое запускается, когда модель сохраняется с использованием метода сохранения модели (хотя там это событие destroy).

Я также узнал, что Backbone имеет отличный механизм для создания пользовательских событий с использованием объекта Backbone.Events. Использование последнего работает, но у меня создается впечатление, что он недостаточно тонкий для моих нужд.

Моя настройка следующая. У меня есть таблица (представление), построенная из строк (представлений) с каждой строкой, имеющей ссылку на модель. Когда модель сохраняется, я хотел бы обновить/отобразить строку, чтобы отразить изменения.

Как создать событие сохранить, которое запускается при сохранении модели, чтобы обновить таблицу (представление), имеющую ссылку на эту модель?

Другими словами, я хотел бы иметь возможность сделать следующее:

this.model.bind('save', this.render);
4b9b3361

Ответ 1

Всего 3 дня назад commit был сделан для Backbone, который запускает событие sync, когда модель успешно сохраняется. Однако этот коммит еще не был выпущен, поэтому вам нужно будет загрузить исходный код из учетной записи github, если вы хотите его использовать.

View = Backbone.View.extend({
  initialize: function() {
    _.bindAll(this, 'onModelSaved');
    this.model.bind('sync', onSuccessCallback);
  },

  onModelSaved: function(model, response, options) {
    //perform your after save logic
  }
});

Ответ 2

Как и в Backbone.js 1.0.0, вы имеете событие sync, которое запускается, если модель успешно сохранена.

this.listenTo(this.model,'sync', this.render);

Обратите внимание, что change:attribute запускается сначала для соответствующих атрибутов, если есть изменение в значении атрибута, за которым следует событие change, а затем событие sync. Событие sync запускается независимо от изменения модели. Это означает, что модель теперь синхронизирована со значениями сервера.

Также это событие срабатывает только в том случае, если значения действительны. i.e models.validate не должно возвращать ошибки для этих значений, полученных с сервера.