easyui非同步載入tree的問題
阿新 • • 發佈:2019-02-01
想要實現從本地中載入json檔案,通過事件來動態的插入到ul中時,遇到了一小bug
html中程式碼是這樣的
<ul class="easyui-tree" id="tt"></ul>
js中的程式碼
$(".next-menu:nth-child(1) a").click(function() {
var $IDstr = $(this).attr("id"),
$treeIDNum = parseInt($(this).attr("treeID")),
jsonURL = "json/" + $IDstr + ".json",
node;
addAttr2Tree(jsonURL);
changeImgSrc($treeIDNum);
});
});
function changeImgSrc(nodeID){
var node = $("#tt").tree('find', nodeID);
if(node){
$("#tt").tree('select', node.target);
}
if (node.attributes) {
$("#img-box" ).attr("src", node.attributes.url);
}
}
function addAttr2Tree(URL){
$("#tt").tree({
url: URL,
method: "get",
animate: true,
lines: true
});
}
起初是想通過一個按鈕的點選事件來動態的載入tree的內容
就是如上程式碼,addAttr2Tree 是用來將點選按鈕時對應的本地json資料加到html中的ul標籤中,
changeImgSrc 是對tree節點的一些選中操作以及圖片的載入,但是無論怎麼除錯,總是會出現一條錯誤
無法獲取attributes屬性!!!我反覆確認attributes是完整無缺的放在json檔案裡的
而且總是第一次點選按鈕時才會出現這種錯誤,第二次及其以後,這種錯誤是沒有的
後來我就想到,是不是因為json資料動態載入的速度比不上程式程式碼執行的速度?!
果然不出我所料!easyui中tree自帶了一個方法onLoadSuccess 當資料成功載入時,才會執行一些操作
所以
$(".next-menu:nth-child(1) a").click(function() {
var $IDstr = $(this).attr("id"),
$treeIDNum = parseInt($(this).attr("treeID")),
jsonURL = "json/" + $IDstr + ".json",
node;
addAttr2Tree(jsonURL);
$("#tt").tree({
onLoadSuccess: function(){
changeImgSrc($treeIDNum);
}
});
});
程式碼改成這樣就可以了。