У меня есть довольно общая модель и коллекция этой модели (, см. ниже ), с которой я имею дело как с основой для ряда представлений. В некоторых представлениях выбор одной из моделей генерирует действия (через атрибут «выбрано» ), и мне нужно иметь возможность отслеживать выбор только на стороне клиента.
Однако похоже, что в Backbone нет простого способа сделать это. Любые атрибуты, добавленные/измененные в модели на клиенте, будут синхронизированы с сервером. Я не могу использовать {silent : yes}
при изменении этого атрибута, потому что мне нужно инициировать изменения в моих представлениях, когда для этого атрибута срабатывает событие change
. Единственный способ, который я придумал, это перезаписать функцию save
на Backbone.Model
. Мой вопрос :есть ли способ иметь атрибуты только на стороне клиента -, которые мне не хватает, ИЛИ мой подход структурно ошибочен каким-то другим способом, который я просто не вижу?
var CSEvent = Backbone.Model.extend({
idAttribute: "_id",
urlRoot : '/api/events',
defaults: {
title : "",
type : "Native",
repeatOrOneTime : "OneTime",
selected : false
}
});
var CSEventCollection = Backbone.Collection.extend({
model: CSEvent,
url: '/api/events',
getSelectedEvent : function() {
return this.find(function(csevent) { return csevent.get('selected') === true; });
},
selectEvent : function(eventId) {
this.deselectEvent();
this.get(eventId).set({selected : true});
},
deselectEvent : function() {
this.getSelectedEvent().set({selected : false});
}
});