Итак, я придумал следующий подход:
Предположим, что модель обладает свойством status
, и когда он модифицируется active
Я хочу, чтобы скрыть редактировать кнопку в других записях (или просто отключить Это).
мой взгляд коллекция прислушивается к изменению модели:
initialize: function(){
this.listenTo(this.collection, "change:status", this.triggerEditable);
},
Слушатель обратный вызов выглядит так:
triggerEditable: function(obj){
var triggerValue = null;
// I am interested in a status which became 'active' or stopped being 'active'
if (obj.get("status") == 'active' && obj.previous("status") != 'active') {
triggerValue = "editable:false";
} else if (obj.get("status") != 'active' && obj.previous("status") == 'active') {
triggerValue = "editable:true";
}
// for any other status change - return
if (!triggerValue) return;
// trigger is fired for all other objects in the collection
_.each(obj.collection.without(obj),function(otherObj) {
otherObj.trigger(triggerValue);
});
}
Таким образом, когда один объект становится активным или перестает быть активным, edidable:false
или edidable:true
запускаются для всех других записей. Все, что мне нужно сделать, это добавить к виду модель инициализаторе слушателя:
this.listenTo(this.model, "editable:false", this.disableEdit);
this.listenTo(this.model, "editable:true", this.enableEdit);
Здесь я предполагаю, что я мог бы объединить эти две строки в одну, первую, слушая editable
имен (как ??) и затем, передав аргумент функции (опять же, как точно?).
Отсюда прямо вперед - реализовать функцию обратного вызова слушателя:
disableEdit: function() {
var e = this.$el.find('button.edit')
e.attr('disabled','disabled');
}
Если кто-то имеет что-то добавить или сделать это решение лучше, я буду рад услышать. В любом случае, надеюсь, что это будет полезно другим!
Nice one !! Можно ли добавить к свойствам модели, которых нет в базе данных? Как? – guyaloni
Честно говоря, я никогда не синхронизовал мосты Backbone с сервером. Я не могу вообразить, что модели на стороне клиента не будут иметь собственных свойств. У вас может быть специальная реализация метода [sync] (http://backbonejs.org/#Model-sync), но это может быть не самое красивое решение. – rednaw
Смотрите этот ответ, возможно: http://stackoverflow.com/questions/11941010/client-side-only-attributes-in-backbone – rednaw