簡體   English   中英

Telerik RadTreeView和客戶端擴展/折疊

[英]Telerik RadTreeView And Client-Side Expand/Collapse

我正在按照這種方法擴展和折疊客戶端JavaScript中的所有節點: http//www.telerik.com/help/aspnet/treeview/tree_expand_client_side.html

然而,它需要花費很長時間來處理這個問題,然后在擴展然后崩潰之后,我得到“腳本無響應”的錯誤,所以我想知道是否有辦法加速這個相當大的樹? 有沒有更好的解析方法? 目前,這棵樹有4層深。

謝謝。

我通過異步擴展和折疊樹來解決“腳本無響應”錯誤。 另外,我從底部擴展(所以你可以看到節點展開)並從頂部折疊,但只有當它到達每個分支的最后一個節點時,所以在視覺上它對用戶來說更有趣。 他們實際上可以看到它發生,如果它不快(IE7以及之前特別慢),它們至少在等待時很有趣。

var treeView, nodes;

function expandAllNodesAsynchronously() {
    if (<%= expandedLoaded.ToString().ToLower() %>) {
        treeView = $find("<%= tv.ClientID %>");
        nodes = treeView.get_allNodes();
        if (nodes.length > 1) {
            doTheWork(expandOneNode, nodes.length);
        }
        return false;
    } else
        return true;
}

function expandOneNode(whichNode) {
    var actualNode = nodes.length - whichNode;
    if (nodes[actualNode].get_nextNode() == null) {
        nodes[actualNode].get_parent().expand();
    }
}

function collapseAllNodesAsynchronously() {
    treeView = $find("<%= tv.ClientID %>");
    nodes = treeView.get_allNodes();
    if (nodes.length > 1) {
        doTheWork(collapseOneNode, nodes.length);
    }
}

function collapseOneNode(whichNode) {
    if (nodes[whichNode].get_nextNode() == null && nodes[whichNode].get_parent() != nodes[0]) {
        nodes[whichNode].get_parent().collapse();
    }
}

function doTheWork(operation, cycles) { //, callback
    var self = this, // in case you need it
        cyclesComplete = 1,
        batchSize = 10; // Larger batch sizes will be slightly quicker, but visually choppier

    var doOneBatch = function() {
        var c = 0;
        while(cyclesComplete < cycles) {
            operation(cyclesComplete);
            c++;
            if(c >= batchSize) {
                // may need to store interim results here
                break;
            }
            cyclesComplete++;
        }
        if (cyclesComplete < cycles) {
            setTimeout(doOneBatch, 1); // "1" is the length of the delay in milliseconds
        }
        else {
            // Not necessary to do anything when done
            //callback(); // maybe pass results here
        }
    };

    // kickoff
    doOneBatch();
    return null;
};

首先使用yourtreeViewInstance.get_nodes()獲取節點,然后將子節點作為eachChildNode.get_nodes()進入層次結構。

然后你可以通過調用.set_expanded(true);擴展每個項目.set_expanded(true); 在您要擴展的每個節點上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM