私は以下の画像に示すようなものを構築しようとしています。Backbone.jsウェブアプリケーションの状態、履歴、データ管理
州&履歴管理
私は、これらのパラメータをアプリで任意の時点で現在の状態をシリアル化し、好ましくバージョンのことができるようにすることができるようにしたいです。
1)まず、defaultStateパラメータをハッシュで指定された有効なパラメータでオーバーライドするにはどうすればよいですか?
defaultState = {
mode : "2up", //Defines layout and how many widgets to init
models : [{year: 1980, selected: "SE"},
{year: 2010, selected: "NO"}] //Widget models
}
var AppRouter = Backbone.Router.extend({
routes: {
'': 'hashChangeHandler',
'v1?:params': 'hashChangeHandlerV1'
},
hashChangeHandlerV1: function(params) {
//here do something to override defaultState with params on init
//set models and layout etc.
}
});
//Handle history entries separately??
collection.bind("change", updateHistory)
function updateHistory() {
//each model toJSON(), then jQuery.param.querystring etc.
appRouter.navigate('v1' + state, false);
}
2)上記は、バージョン管理を行うための有効な方法だろうか?(状態パラメータ/ APIが変更された場合、v1ルート用の特定のハンドラとv2用の特定のハンドラがあります)このウィジェット化されたビジュアル化アプリケーションで動作する状態/履歴ソリューションの例を挙げると、幸せ:)
3)私は、タイムスライダをドラッグすると、特定の他のイベントに設定されている履歴エントリを防止したいと思います。スライダーをドラッグしたときにcollection.changeイベントリスナー(インスタンス化されたすべてのWidgetModelsを追跡する)を削除できますか?何をお勧めしますか?
データ管理
ビューがインスタンス化されている(と彼らのモデルの選択属性の変更をするとき)私がロードされていることを確認データ(数値のstat。データの300〜400キロバイト)をしたいのですが前に。
4)Backboneでこれを解決する典型的な方法は何ですか?(属性が安定するまで、すなわちmodel.triggerイベントを遅らせる。)
ご返信ありがとうございます。具体的なケースは、モデルの属性 "selectedCountry"を変更すると、ビューを再描画する前に300〜400 KBのCSVデータをフェッチする必要がある場合です。良いアプローチは何ですか? – dani
同じです。 '選択された国'が変更された場合: - ビューがそれを傍受して '読み込み'などを表示します - 統計情報(おそらく統計情報コレクション)を読み込み、ロードされたときにイベントをトリガーします - 「読み込み」を隠してデータを表示します モデルはデータを読み込む必要があります。フェッチの成功コールバックで、アプリケーションの残りの部分がロードされたことを知らせるイベントをトリガーできます。 – dira