jQuery - dynatree延迟加载和多层(类型3)selectMode

时间:2012-03-19 19:04:26

标签: jquery dynatree jquery-dynatree

我正在使用dynatree,并将selectMode设置为3(多个hier)。我也使用复选框,所以当你选择一个文件夹时,它下面的所有孩子也会被选中。

我已启用(并且需要)延迟加载。

问题是dyna树在选择文件夹时不会加载所有子项。它只选择之前已加载的子项。

我希望它能够进行必要的延迟加载以使所有可用的孩子在进行多人选择之前获得。

3 个答案:

答案 0 :(得分:1)

如果我正确读到这一点,那么您正试图让孩子们进行检查。当你检查'父母?这不起作用,因为当使用延迟加载时,孩子们还不存在。

我通过检查是否选择了我在延迟加载时添加的孩子的父母来解决这个问题'。如果父母被选中,我会加载已经选中的孩子。

以下是一些代码供您查看。我从XMLHTTPREQUEST获取树数据 treeArray [0] = ParentKEY,treeArray [1] = ChildKEY,treeArray [2] = ChildTITLE

function addChildNode(NodeID, NodeName, ParentID){
    jQuery("#tree2").dynatree("getTree").getNodeByKey(ParentID).addChild({title: NodeName, key: NodeID, icon: false, isFolder: true, isLazy: false});
}

/*
*If treeArray[0] "ParentKEY" is selected, create the child already selected.
*/

if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[0]).isSelected() == true){
    if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
        addChildNode(treeArray[1], treeArray[2], treeArray[0]);
        jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]).select();
    }
}else{
    if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
        addChildNode(treeArray[1], treeArray[2], treeArray[0]);
    }
}

答案 1 :(得分:1)

我通过在懒惰阅读后强制选择父母来解决这个问题:

onLazyRead: function (node) {
    if (!node.data.isLeaf) {
        node.appendAjax({
            success: function (node, event) {
                node.toggleSelect();
                node.toggleSelect();
            }
        });
    }
}

答案 2 :(得分:1)

我知道我参加派对有点晚了,但我也找到了解决方案。希望它对某人有帮助。

首先,您需要一个onSelect树的处理程序(如果您还没有)。选择节点后,将其标记为已选中,然后尽可能展开它。这是我的:

onSelect: function(selected, node) {
    if (selected === true) {
        node.data.activateChildrenOnLoad = true; //Let the lazy children know
        //node.expand(true) did not work for me, but it might for you
        if (!node.isExpanded()) {
            node.toggleExpand();
        }
    }
}

接下来,您需要在onLazyRead函数中插入一些代码。我手动处理所有AJAX,所以如果你让dynatree为你处理它,你可能需要改变一些东西。

onLazyRead: function(node) {
    getNodesFromServer(function(nodes) {
        node.addChild({
            selected: node.data.activateChildrenOnLoad,
            activateChildrenOnLoad: node.data.activateChildrenOnLoad
        });

        if (node.data.activateChildrenOnLoad) {
            var nodes = node.getChildren();
            var last = nodes[nodes.length-1];
            if (!last.isSelected()) {
                last.toggleSelect();
            }
            if (!last.isExpanded()) {
                last.toggleExpand();
            }
        }
    });
}

这就是它的全部内容。当您选择(检查)一个节点时,它将递归加载,检查并展开所有惰性子节点。