1. 程式人生 > >easyui非同步載入tree的問題

easyui非同步載入tree的問題

想要實現從本地中載入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);
            }
        });
    });

程式碼改成這樣就可以了。