アプリケーションの状態を保持するための単純なモデルを作成できます。特別なものは必要ありません。通常のバックボーンイベントメソッドを実装するデータのバッグだけです。
var AppState = Backbone.Model.extend({});
var app_state = new AppState();
次に、ジャンルリストビューはクリックイベントをリッスンし(すでに持っているように)、誰かが変更したときにアプリ状態モデルに現在のジャンルを設定します。
var Genres = Backbone.View.extend({
//...
choose: function(ev) {
// This would be the click handler for the genre,
// `.html()` is just for demonstration purposes, you'd
// probably use a data attribute in real life.
app_state.set({genre: $(ev.target).html() });
},
});
"change:genre"
個々のジャンルのビューは、アプリ状態モデルのイベントをリッスンし、ジャンルの変更に応じて反応します。
var Genre = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'change_genre');
app_state.on('change:genre', this.change_genre);
},
//...
change_genre: function() {
// Refill the genre display...
}
});
デモ: http: //jsfiddle.net/ambiguous/mwBKm/1/
必要なデータのモデルを作成できます。モデルは、バックボーンでデータイベントを操作するための便利な方法です。追加のボーナスとして、このアプローチにより、アプリケーションの状態を永続化するのがかなり簡単になります。通常のバックボーン永続化サポートを追加するだけで、すぐに使用できAppState
ます。
データ以外のイベントをプッシュするために単純なイベントバスのみが必要な場合は、BackboneのEvents
メソッドを使用して単純なイベントアグリゲーターを構築できます。
app.events = _.extend({}, Backbone.Events);
次に、グローバル名前空間があると仮定するとapp
、次のように言うことができます。
app.events.on('some-event', some_function);
と
app.events.trigger('some-event', arg1, arg2, ...);