の要点はBackbone.View
、DOM サブツリーの変更とイベント処理を View クラスにカプセル化することです。そのため、バックボーンはあなたのシナリオをサポートしていません。
同じ最終結果を得るには、いくつかのオプションがあります。
シンプルな (しかし間違った) 方法: jQuery を使用してヘッダーのイベントをリッスンします。
var ContentView = Backbone.View.extend({
initialize: function() {
$(".h_left").on('click', this.newLocation);
},
remove: function() {
$(".h_left").off('click', this.newLocation);
Backbone.View.prototype.remove.call(this);
}
});
これにより、ヘッダー要素のカプセル化が破られ、コンテンツ ビューがヘッダー要素の実装に緊密に結合されます。言い換えれば、スパゲッティ。
正しい方法: メディエーターを使用して、ヘッダーから他のビューにメッセージを渡します。
var HeaderView = Backbone.View.extend({
events: {
"click .h_left": "onLeftButtonClick"
},
onLeftButtonClick: function() {
//You can use the root Backbone object as a global event bus
//Publish a message
Backbone.trigger('header:leftbutton');
}
});
var ContentView = Backbone.View.extend({
initialize: function() {
//Subscribe to a message. If you use listenTo, the subscription is
//automatically cleared when your content view is destroyed.
this.listenTo(Backbone, 'header:leftbutton', this.newLocation);
},
newLocation: function() {
//..
}
});