在"Learning Jquery Third Edition"中,我发现了这些行:
正在销毁小部件....调用 .myWidget('destroy') 将删除 页面中的 myWidget 小部件。小部件工厂执行大部分工作 工作,但是如果我们在_create内部修改了文档的某些部分(如 我们在这里做了);所以我们需要自己清理。
但是,在创建一个新的小部件时,我无法想象我们不修改_create函数的情况。你能给我举个例子吗?
这并不是说您是否修改了_create
方法,而是说您是否在_create
方法(或任何与此相关的方法)中修改了文档。
基本销毁方法为您做了很多事情,包括:
- 取消绑定附加到根元素的任何事件
this.element
这些事件在小组件下具有命名空间。 - 从元素 jQuery 数据存储中删除实例。 删除小组件
- 工厂在小组件生命周期中可能追加的任何类。
除此之外的任何内容都需要由小部件本身通过扩展 destroy 方法来清理,例如删除附加到文档的任何元素,取消绑定到this.element
以外的节点的任何事件(您可能已将调整大小或滚动事件附加到窗口或文档等)
同上。这个想法是在_create函数中创建/附加的任何 DOM 操作或事件都会在销毁函数中删除。
我为我创建的控件附加了一个修改后的示例:http://pastebin.com/M9CzUajs
该链接显示了如何在销毁中还原附加的事件,以及如何重新应用任何 CSS 修改。这在隐藏原始元素的渐进式增强示例中很常见。