次の状況を処理するための最良の方法は何だろうと思っています。ビューにそれぞれ関連付けられるレコードのコレクションがあるとします。各ビューには、特定の機能を実行するボタンがあります。議論のために、ページには一度に最大 100 のビューが存在する可能性があります。このビューの例を以下に示します。
var RecordView = Backbone.View.extend({
events: {
'click .js-cta': 'onCTAClick'
},
onCTAClick: function(event) {
// Do something.
}
});
これは明らかに 100 の DOM リスナーをバインドし、必要以上に多くのメモリを占有します。これを処理する 1 つの方法は、コレクションのビューを作成し、そのレベルに委任されたリスナーを 1 つ配置することです。これにより、どのビューに通知するかを決定し、次のようにイベントをトリガーします。
var CollectionView = Backbone.View.Extend({
events: {
'click .js-cta': 'onCTAClick'
},
onCTAClick: function(event) {
// Use event data to determine appropriate child view to notify.
// Notify the child view by triggering an event on it (childView.trigger('CTAClick')).
}
});
var RecordView = Backbone.View.Extend({
initialise: function() {
this.on('CTAClick', this.onCTAClick);
},
onCTAClick: function(event) {
// Use event data to determine appropriate child view to notify.
// Notify the child view by triggering an event on it (childView.trigger('')).
}
});
これは 100 以上の DOM リスナー メソッドよりも優れているのではないでしょうか... DOM リスナーは 1 つしかありませんが、RecordView には 100 のリスナーがイベントの通知を待っています。DOM イベントリスナーはバックボーンイベントリスナーよりも「重い」ですか? リスナーを完全に削除し、CollectionView でメソッドを直接トリガーして、リスナーを 1 つに減らすこともできますが、これはビューを緊密に結合します。これらの 2 つのビューが機能的に非常に近く、とにかくほとんど織り交ぜられている場合、この緊密な結合は問題になりますか?
この状況にアプローチする正しい方法は何ですか?