需要一個可以選擇部門的功能,開始選用的是easyUI tree,不過最后被嫌棄了,只好尋找更優的解決方法,當然也可以通過異步加載的方式來避免一次性載入速度慢的問題,但這不在考慮范圍內。
終於在《打造基於jQuery的高性能TreeView》中找到了一個不錯的東東,具體就不用多說,看原文就可以。http://www.cnblogs.com/xuanye/archive/2009/10/26/1590250.html
這里要討論的就是如何將現有的插件改造成自己想要的,原插件是多選的,而這里選擇部門只需要選擇一個就可以了,簡單點可以通過限定最終的選定的結果數量來限制,但是選擇框還是checkbox,既然要用那么就整像樣點,所以就來動手改造成radio的形式,原插件擴展也是非常容易的,只需要做簡單的修改就可以滿足自己的要求。
1、首先是插件的設置,一處是覆蓋checkbox的0、1狀態的圖標,用准備好的radio來替換,另一處就是覆蓋checkbox的點擊方法
1 var o = { 2 showcheck: true, 3 theme: "bbit-tree-lines", //bbit-tree-lines ,bbit-tree-no-lines,bbit-tree-arrows 4 icons: ["radio_0.gif", "radio_1.gif", "checkbox_2.gif"], 5 oncheckboxclick:function(item){ 6 $("#tree").clear(); 7 var s = item.checkstate != 1 ? 1 : 0; 8 $("#tree").nodeclick(item,s); 9 return true; 10 } 11 };
2、需要在插件里增加2個方法,就是前面點擊事件用到的方法
1 //重置所有選中項 2 $.fn.clear = function() { 3 if (this[0].t) { 4 return this[0].t.clear(); 5 } 6 return null; 7 }; 8 //節點點擊 9 $.fn.nodeclick = function(item,s) { 10 if (this[0].t) { 11 this[0].t.check(item,s); 12 } 13 };
3、 我采用的數據是用java后台輸出json,對象的屬性首頁字母輸出是小寫,原插件的子結點名為ChildNodes,我這邊改成了childNodes。
效果圖如下:
http://files.cnblogs.com/longterm/treeview_radio.rar