【发布时间】:2010-12-22 02:02:32
【问题描述】:
我创建了一个 jQuery 插件,允许用户与树进行交互(创建、更新、删除节点)。与树交互的方法至少有十几种。理想情况下,我不想像现在这样用所有这些特定于树的方法污染 jQuery 命名空间,因为每个方法都为命名空间冲突提供了额外的机会。我只想要一种激活插件本身的方法,所以我正在寻找重构。
$('ol#tree').tree(options) // just a single jQuery method for my plugin is fine…
$('li#item4').moveNode('li#item6') // …however, we also have this supporting method
$('ol#tree').appendNode(node) // …and this one
$('li#item2').expandBranch() // …and this one, etc.
在不污染 jQuery 命名空间的情况下,将接口暴露给已激活的 DOM 元素及其子元素有哪些做法?
我玩过保存创建树时返回的 jQuery 对象。
var tree = $('ol#tree').tree();
此树对象本身将被扩展以包含方法。不幸的是,由于树本身正在被定期操作,因此存在该对象的状态与父 DOM 元素及其子元素的状态不同步的风险。我不确定尝试在该对象中维护状态是否值得,因为 DOM 本身将始终具有当前状态。
我也考虑过使用命名空间(来自 John Resig 的 Space plugin):
$('ol#tree').tree()
$('ol#tree').tree.appendNode(node)
$('ol#tree').tree.item('li#item2').expandBranch()
你如何处理这个问题?你能指出一些现有的插件来解决这个问题,我可以从他们的代码中学习吗?
【问题讨论】:
标签: jquery jquery-plugins namespaces