我尝试使用具有丰富功能的 jquery 创建自定义小部件,因此我需要针对许多标准事件(例如 dblclick、click、focus、blur 等)的自定义处理程序。
我可以应用以下两种策略之一:
全局使用
$(document).on('click', '.widget-name .element-class', handle_click);
一次,其中 handle_click 是处理函数$(widget-element).find('.element-class').on('click', handle_click)
在创建每个小部件实例期间使用像这样绑定到封闭元素:
$(this.element)._on('click', function(event){
var $this = $(this);
if($this.is('.element-class')){ handle_click(this, event); }
else if($this.is(...)){...}
...
});
哪种方法更好的设计?
我一般都知道“这取决于”,所以让我添加一些约束:
一种。小部件通常由约 100 个 DOM 元素组成,并专门处理不同的事件。
湾。小部件通常不会被销毁并再次创建,只是有时会隐藏。
C。通常会加载 1-3 个小部件实例。
d。元素将根据用户请求动态添加,但同时仅<10
e。在小部件中启用了拖放操作,这可能涉及同时重新定位大约 20 个 DOM 元素。
F。小部件本身通常不可拖动。
由于定义了许多单独的事件处理程序,方法 2 是否存在显着的性能(或显着的内存)损失?(是的,这可能取决于我知道的浏览器实现。)