1

我创建了一个 jQuery 插件,它需要响应浏览器窗口的大小调整。它使用 jQuery 的事件命名空间机制订阅事件:

var $window = $(window);
$window.on("resize.myPlugin", function(e) {
    // my resize code
});

所以当插件被销毁时,我可以优雅地取消订阅,而不会破坏其他插件:

$window.off("resize.myPlugin");

但是,在这种情况下,如果我同时拥有同一个插件的多个实例会怎样?像上面这样调用off也会取消订阅它们的事件处理程序,因为它们使用相同的命名空间。

如何在不中断同一插件的其他实例的情况下取消订阅事件?

4

2 回答 2

1

我会为每个插件实例(由共享生成器生成)选择一个唯一的 ID,并通过将命名空间扩展到以下位置来使用一种“子命名空间” resize.myPlugin_instanceId

var $window = $(window);
$window.on("resize.myPlugin_"+uniqueInstanceId, function(e) {
    // my resize code
});

$window.off("resize.myPlugin_"+uniqueInstanceId);

我想,你如何生成和访问这个 ID 将取决于你特定的插件架构,但我猜它应该相当简单。

于 2013-05-02T16:08:51.087 回答
1

如果您希望同一插件的其他实例共存,您可以使用随机命名空间为事件添加前缀,从而避免断开所有事件。

编辑:从手机发帖,花时间写作。:)

于 2013-05-02T16:15:55.870 回答