我试图使用Backbone.js的跟踪国家在这个应用程序:Backbone.js的状态管理/视图初始化
我有一个“ChartAppModel”用默认设置的:
ChartAppModel = Backbone.Model.extend({
defaults: {
countries : [],
selectedCountries : [],
year : 1970,
},
initialize: function() {
loadAbunchOfData();
checkStartState();
}
});
如果给一个开始片段,这个默认状态然而,应覆盖:
var startState = $.deparam.fragment(); //using Ben Alman's BBQ plugin
this.set({selectedCountries: startState.s, year: startState.y});
0123现在
,例如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);
}
});
...和relativel Ÿ一旦这种状态管理器将崩溃......
问题:
1)如何根据片段我初始化我的(例如,“该复选框应检查”)的意见? (为国家的最佳做法任何提示/启动状态,这不是一个典型的“路线”的赞赏)
2)如何避免我的意见设置上,他们自己听的模型属性?
3)如何能够推动基于模型的一部分,一个新的状态?
奖金:)
4)你会如何放置该应用程序的代码来描述?
谢谢!
那就是一个很好的答案 - 我开始重新考虑使用“路线”。但假设我有一个包含5个参数的开始状态(url):year = 1979,stacked = true,layout = fullscreen,selected = [Sweden,Finland],zoom = 2。基于这些参数,数据应该加载,x/y轴应该被计算并且视图应该被渲染等等。该方法将使用什么路线?伪代码非常欢迎:=) – dani 2011-05-25 17:17:37
感谢@dani,不确定我的解释有多清晰。在稍微相关的情况下,在水平面下方安装滑块可能会增加用户的混淆。我会用一些伪代码更新原始答案。 – 34m0 2011-05-25 19:02:16