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});
これで、たとえば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)説明されているアプリのコードをどのようにレイアウトしますか?
ありがとう!