我创建了一个jQuery插件,需要响应浏览器窗口的大小调整。它使用jQuery的事件命名空间机制订阅事件:
var $window = $(window);
$window.on("resize.myPlugin", function(e) {
// my resize code
});
因此,当插件被销毁时,我可以优雅地取消订阅而不会破坏其他插件:
$window.off("resize.myPlugin");
但是,在这种情况下,如果我同时拥有同一个插件的多个实例,会发生什么?像上面这样调用off
也会取消订阅他们的事件处理程序,因为它们使用相同的命名空间。
如何在不中断同一插件的其他实例的情况下取消订阅活动?
答案 0 :(得分:1)
我为每个插件实例选择一个唯一的ID(由共享生成器生成),并通过将命名空间扩展到resize.myPlugin_instanceId
来使用一种“子命名空间”:
var $window = $(window);
$window.on("resize.myPlugin_"+uniqueInstanceId, function(e) {
// my resize code
});
$window.off("resize.myPlugin_"+uniqueInstanceId);
我想,你究竟如何生成和访问这个ID取决于你的特定插件架构,但我猜它应该相当简单。
答案 1 :(得分:1)
如果您希望同一插件的其他实例共存,则可以使用随机命名空间为事件添加前缀,从而避免断开所有这些实例的连接。
编辑:从手机发帖,花时间写作。 :)