У меня есть модель диаграммы, подобная этой:
//PSEUDO
chartModel = Backbone.Model.extend({
defaults: {
year : 1970,
selected = ["Sweden", "Denmark"]
}
}
Теперь я хотел бы установить оба года и выбрал:
chartModel.set({year: 1987, selected : ["Finland"]})
Но прежде чем инициировать изменение модели, я 'Я хотел бы «разрешить» изменения в этой нестабильной модели.Поэтому я передаю значение silent: true и переопределяю метод set:
chartModel.set({year: 1987, selected : ["Finland"]}, {silent:true})
//Pseudo set override
set : function(attrs, options) {
// Extract attributes and options.
options || (options = {});
if (!attrs) return this;
if (attrs.attributes) attrs = attrs.attributes;
var now = this.attributes, escaped = this._escapedAttributes;
[...]
datamanager.loadNewDataIfNeeded(oldModel, newModel, callback)
Я бы специально хотел, чтобы менеджер данных "отличал" старые атрибуты от новых, прежде чем я вызову событие изменения:
callback : function(){
chartModel.change();
}
Теперь - когда я знаю, что правильные данные на месте - я бы хотел, чтобы представления отображались.
... Но мое представление боковой панели, которое обязательно должно измениться: выбранное не отображает?
Sidebar = Backbone.View.extend({
initialize: function(){
this.model.bind("change:selected", this.render);
}
render : [...]
});
Мои вопросы:
При ручном запуске model.change () почему не запускаются события изменения отдельных атрибутов??
Действительно ли мне нужно переопределить метод набора моделей, чтобы добиться того, что я хочу («разрешение модели, когда несколько атрибутов изменяются одновременно») или есть лучший метод?