我创建了一个jQuery插件,允许用户与树交互(创建,更新,删除节点)。至少有十几种与树交互的方法。理想情况下,我不想像现在这样使用所有这些特定于树的方法来污染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.
将接口暴露给已激活的DOM元素及其不污染jQuery名称空间的子元素的一些做法是什么?
我玩过保存jQuery对象,当我创建树时会回来。
var tree = $('ol#tree').tree();
此树对象本身将被扩展以包含方法。不幸的是,由于树本身被有规律地操作,这会冒着让该对象的状态与父DOM元素及其子元素的状态不同步的风险。我不确定在该对象中维护状态是否值得,因为DOM本身将始终具有当前状态。
$('ol#tree').tree()
$('ol#tree').tree.appendNode(node)
$('ol#tree').tree.item('li#item2').expandBranch()
你如何处理这个问题:
我还使用一个命名空间(通过约翰Resig的Space plugin)考虑?你能指点我一些现有的插件来解决这个问题,我的代码可以学到吗?
我已经看到了这种方法,并喜欢它。但是,我已经解决了一些问题,如我在答案中看到的。 – Mario 2009-12-01 23:38:15
没有理由你不能这样做。 – 2010-01-21 17:32:01
appendNode()或item()方法如何引用包含所选元素的jQuery对象(在本例中为$(“ol#tree”))?看起来好像它遇到了这样的问题:这些函数中的“this”并没有让你找回jQuery对象,只是nicetree对象,它是一个从jQuery原型创建的静态对象。 – thomasrutter 2010-10-07 12:59:58