我創建了一個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