最近已經(jīng)有好幾個使用了 zTree 的朋友跟我們聯(lián)系過,也就開始有了一些由于 zTree 的 API 幫助文檔未能更準確說明造成誤解的問題。
這一篇博文就專門作為總結(jié) zTree 的常見問題解答板塊了。希望能對剛開始使用 zTree 的朋友們起到一些幫助。
1. zTree一定要使用 JQuery 的核心包嗎?(2010-08-11)
答:zTree 是在 JQuery 核心包的基礎(chǔ)上開發(fā)出來的專用于 WEB 上顯示樹形數(shù)據(jù)的插件。目前使用的JQuery版本是 jquery-1.4.2.js
2. 為什么 zTree 無法使用我生成的 JSON 數(shù)據(jù)?(2010-08-11)
答:請務(wù)必區(qū)分 JSON 格式的字符串 和 JSON 數(shù)據(jù)對象。 zTree 使用的是 JSON 數(shù)據(jù)對象,不是 JSON 格式的字符串。
____舉例:
______(1)JSON 格式的字符串: var nodes = "[{id:1, name:'test1'}, {id:2, name:'test2'} ]";
______(2)JSON 數(shù)據(jù)對象: var nodes = [{id:1, name:'test1'}, {id:2, name:'test2'} ];
3. 為什么 API 文檔中的 getNodes() 方法只能得到 zTree 的根節(jié)點,而不是全部節(jié)點?(2010-08-11)
答:getNodes()方法返回值是 Array(JSON) 類型的,并不是說把全部節(jié)點轉(zhuǎn)換為數(shù)組傳遞回來,因為這樣對于樹這種數(shù)據(jù)類型來說,就沒有太大意義了。 之所以是Array,主要是因為根節(jié)點可能會有若干個,至于根節(jié)點下面的子節(jié)點,都保存在每個 treeNode 數(shù)據(jù)的 nodes 屬性下,整個數(shù)據(jù)對象的結(jié)構(gòu)沒有發(fā)生任何改變。(詳情請參見API文檔中 參數(shù) --> zTreeNodes詳解內(nèi)的各個屬性說明)。
____如果想遍歷全部節(jié)點,請使用遞歸方法遍歷即可——“JS操作 演示”的頁面中有遍歷的樣例代碼。
4. 怎樣才能獲取 checkbox 上打勾的節(jié)點并傳遞給后臺服務(wù)器?(2010-08-11)
答:首先說如何獲得全部打勾的節(jié)點——使用 getCheckedNodes(checked) 方法即可(詳情請參見API文檔中 方法 --> 獲取 --> getCheckedNodes(checked) 內(nèi)的各個屬性說明)。
____然后說說給服務(wù)器提交數(shù)據(jù)的問題:提交數(shù)據(jù)無非是 Get 或者 Post,一般建議使用 Post 方式。不管用哪種方式都是需要提交字符串給后臺的。一般是把需要的ID排列成逗號分隔的字符串即可(例如:1,2,3等);如果一定使用 JSON 格式提交,就將得到的 JSON 對象轉(zhuǎn)換為 JSON 格式的字符串,我們建議不要將得到的整個 zTreeNode 對象全都轉(zhuǎn)成 JSON 對象傳遞,只保留自己后臺需要的數(shù)據(jù)即可。
5. 為什么我的 zTree 樣式亂套了?(2010-09-06)
答:zTree 的主要樣式都依靠了 css 進行設(shè)定,在你所設(shè)計的頁面中,如果針對 zTree 容器的父容器有了較多的樣式設(shè)定,則有可能會導致 zTree 的樣式異常,這時候你需要做的是利用 css 的命名規(guī)則,編寫能覆蓋部分關(guān)鍵樣式的新樣式,保證 zTree 能夠正常顯示。當然最好的辦法是盡量避免這種情況發(fā)生。
舉例(特別感謝 zsy619):
使用模板頁,結(jié)構(gòu)如下:
<div id="Guide_back">
<ul>
<li id="Guide_top">
<div id="Guide_toptext">
<asp:ContentPlaceHolder ID="CphTitle" runat="server">
</asp:ContentPlaceHolder>
</div>
</li>
<li id="Guide_main">
<div id="Guide_box">
<div class="zTreeDemoBackground">
<ul id="treeDemo" class="tree"></ul>
</div>
</div>
</li>
</ul>
</div>
其中模板頁定義了樣式:
#Guide_back, #Guide_back ul, #Guide_back li
{
padding: 0px;
margin: 0px;
list-style-type: none;
}
這樣將影響樹型結(jié)構(gòu)顯示,沒有層次關(guān)系了;
解決方法:
在頁面定義以下樣式:
#treeDemo , #treeDemo ul, #treeDemo li
{
margin: 0;
padding: 0 0 0 5px;
list-style-type: none;
}
6. 如何在異步加載后自動選中第一個節(jié)點?(2010-09-14)
答:這個問題首先感謝 zsy619
解決方案參考如下:
定義一個全局變量 isFirst
var zTreeObj;
var setting;
var isFirst = false;
頁面加載函數(shù)中:
$(document).ready(function() {
isFirst = true;
zTreeObj = $("#ulTree").zTree(setting, zNodes);
});
異步加載函數(shù):
function zTreeOnAsyncSuccess(event, treeId, msg) {
if (isFirst) {
var nodes = zTreeObj.getNodes();
zTreeObj.selectNode(nodes[0]);
}
}
補充:
至于是否需要在 zTreeOnAsyncSuccess 中重新把isFirst設(shè)置成false呢? 這就看你的需求了,是每次異步加載都要自動選擇第一個節(jié)點還是說僅僅第一次的異步加載后自動選擇。