我試圖使用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