Я пытаюсь отслеживать состояние в этом приложении с помощью Backbone.js:
У меня есть "ChartAppModel" с набором значений по умолчанию:
ChartAppModel = Backbone.Model.extend({
defaults: {
countries : [],
selectedCountries : [],
year : 1970,
},
initialize: function() {
loadAbunchOfData();
checkStartState();
}
});
Если задан начальный фрагмент, это состояние по умолчанию должно быть перезаписано:
var startState = $.deparam.fragment(); //using Ben Alman BBQ plugin
this.set({selectedCountries: startState.s, year: startState.y});
Теперь, например, SidebarView готов к обновлению:
ChartAppViewSidebar = Backbone.View.extend({
initialize: function(){
this.model.bind("change:selectedCountries", this.render);
},
render : function(){
[... render new sidebar with check boxes ...]
},
Проблема в том, что у меня также есть обработчик событий на боковой панели, который обновляет модель:
events: {
"change input[name=country]": "menuChangeHandler",
},
menuChangeHandler : function(){
[... set selectedCountries on model ...]
},
Итак, будет цикл обратной связи... И тогда мне также понравится способ нажатия нового состояния - так что я слушаю изменения модели:
ChartAppModel = Backbone.Model.extend({
initialize: function() {
this.bind("change", this.setState);
}
});
... и относительно скоро этот государственный менеджер рухнет...
Вопросы:
1) Как мне включить мои представления (например, "какие флажки должны быть проверены" ) на основе фрагмента? (любые подсказки о лучших практиках состояния состояния/начала, которые не являются типичным "маршрутом", оцениваются)
2) Как я могу избежать своих представлений, устанавливающих атрибут на модели, которую они сами слушают?
3) Как я могу нажать новое состояние на основе части модели?
Бонус:)
4) Как бы вы описали код для описанного приложения?
Спасибо!