Как вызвать событие при сохранении модели Backbone?
Если я правильно выполнил свою домашнюю работу, я пришел к выводу, что у Backbone нет встроенного события сохранить, которое запускается, когда модель сохраняется с использованием метода сохранения модели (хотя там это событие destroy).
Я также узнал, что Backbone имеет отличный механизм для создания пользовательских событий с использованием объекта Backbone.Events. Использование последнего работает, но у меня создается впечатление, что он недостаточно тонкий для моих нужд.
Моя настройка следующая. У меня есть таблица (представление), построенная из строк (представлений) с каждой строкой, имеющей ссылку на модель. Когда модель сохраняется, я хотел бы обновить/отобразить строку, чтобы отразить изменения.
Как создать событие сохранить, которое запускается при сохранении модели, чтобы обновить таблицу (представление), имеющую ссылку на эту модель?
Другими словами, я хотел бы иметь возможность сделать следующее:
this.model.bind('save', this.render);
Ответы
Ответ 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
не должно возвращать ошибки для этих значений, полученных с сервера.