销毁 Selectize.js 个实例

Destroying Selectize.js instances

我正在加载一个 ajax 表单,其中包含我应用 .selectize() 的输入。我 运行 在关闭并重新打开表单时遇到问题,因为仍然存在 Selectize 构造函数的实例。

有没有办法在我关闭表单时删除这些实例?通过查看 Selectize.count 下的 DOM 中的 firebug,我可以在打开和关闭表单时看到这些对象的建立。我如何访问这些实例并销毁它们?

我试过这个:

instance1[0].selectize.destroy();
instance2[0].selectize.destroy();

这样分配变量:

instance1 = $('#preferences_sport').selectize({
  //custom code
});

instance2 = $('#preferences_sport').selectize({
  //custom code
});

Selectize.count 继续增加,我不知道从这里到哪里去。

这是一个 JSFiddle,我在其中展示了正在构建的对象

添加 fiddle 后,我明白你在说什么了。我开始搜索该计数 属性 的文档。我找不到它。所以接下来我搜索了源代码,因为这似乎是一些没有记录的东西。我能在源代码中找到的唯一计数是这一行:

eventNS          : '.selectize' + (++Selectize.count),

所以基本上这解释了它。虽然它确实为每个被调用的元素增加,但该计数不是 运行 小部件的当前计数。它是一个内部 属性 编写它的人用作事件命名空间的 GUID。因此,例如,当您调用销毁时,他只能删除特定于该小部件实例的事件。

我不会用这个 属性 告诉你任何事情。 我认为可以安全地假设你的 destroy 工作正常。如果您不熟悉事件命名空间,您可以在这里阅读更多相关信息:

https://api.jquery.com/event.namespace/

如果您搜索它,您可以看到他在整个代码中使用 eventNS 来附加事件。 jQuery 在他们的代码中也这样做了很多东西,比如在他们的事件和数据代码中。他们有一个他们使用的 GUID 变量,因此任何在页面上加载多个 jQuery 实例的人都不会踩到其他实例。

所以我想我现在唯一想问的是你从哪里了解到这个计数的属性?如果您刚刚找到它并假设这意味着这是 运行 个实例的计数,请尝试记住始终检查文档。如果您在文档中找到了它,那么现在请指点我,以便我看一下它是否验证了我发现的内容或需要更多研究。


另外提醒一下,我在您的 fiddle 中看到了这个,input 是一个自闭合标签或也称为 void 元素。

<input type="text" value="Calgary, Edmonton" class="selectize_this"></input>

应该只是:

<input type="text" value="Calgary, Edmonton" class="selectize_this" />

来自规范:

Void elements can't have any contents (since there's no end tag, no content can be put between the start tag and the end tag).

Void elements: area, base, br, col, embed, hr, img, input, keygen, link, meta, param, source, track, wbr

Selectize API 确实公开了以下方法:

destroy()

Destroys the control and unbinds event listeners so that it can be garbage collected.