別のビュー(OuterView
)内でレンダリングされるバックボーンビュー(InnerView
)があります。どちらもclick
イベントのイベントハンドラを含み、イベントデリゲーションは(デフォルトで)有効になっています。カスタムデータでイベントを拡張して伝播する前に
InnerView
は、それがさらに伝播する前にイベントにデータを追加したいと思います。それはその後の未定義のまましかし、—以下に示すように、コード—は、全くe.data
に影響を与えていないようだ。
var InnerView = Backbone.View.extend({
events: {
"click": "onClick"
},
render: function() {
// ...
},
onClick: function (e) {
e.data = e.data || {};
e.data.myData = 123;
console.log(e.data); // Object { myData: 123 }
}
});
var OuterView = Backbone.View.extend({
events: {
"click": "onClick"
},
render: function() {
// ...
this.$el.append(new InnerView);
// ...
},
onClick: function (e) {
console.log(e.data); // undefined
}
});
私が伝播した後、カスタムデータでそれを再トリガからのイベントを停止しようとした(されるであろう私はここでイベントオブジェクトにデータを追加する方法を見ることができないように)多少異なるフォーマットで保存された:
// alternative version of InnerView#onClick()
onClick: function (e) {
e.stopImmediatePropagation();
this.trigger('click', {myData: 123});
}
しかし、その後OuterView
は全くクリックイベントを受信していません。
どのようにこの問題に対処しますか?イベントビューアでイベントを直接トリガすることはできません(またはメソッドを呼び出す、またはプロパティを設定することはできません)。この2つは互いに公開されないためです(イベントメカニズムを利用することに決めました)。