我想知道处理以下情况的最佳方法是什么。想象一下,我们有一组记录,每个记录都将附加到一个视图。每个视图都有一个运行特定功能的按钮。出于争论的目的,页面上一次最多可以有一百个这样的视图。此视图的示例如下:
var RecordView = Backbone.View.extend({
events: {
'click .js-cta': 'onCTAClick'
},
onCTAClick: function(event) {
// Do something.
}
});
这显然会绑定 100 个 DOM 侦听器并占用比我们想要的更多的内存。处理此问题的一种方法是为集合创建一个视图,并在该级别放置一个委托侦听器,这将确定应通知哪个视图,然后触发一个事件,如下所示:
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 侦听器,但 RecordView 中有 100 个侦听器等待收到事件通知。DOM 事件侦听器是否比 Backbone 事件侦听器“重”?您可以完全删除侦听器并让 CollectionView 直接触发一个方法,从而将侦听器减少到一个,但这会将视图紧密耦合。如果这两个视图在功能上如此接近并且几乎交织在一起,那么这种紧密耦合是否重要?
处理这种情况的正确方法是什么?