jQuery-动态树延迟加载和多层次(类型3)选择模式
我正在使用dynatree,将selectMode设置为3(多层次)。我也使用复选框,所以当你选择一个文件夹时,它下面的所有子文件夹都会被选中 我已经(并且需要)启用了延迟加载 问题在于,在选择文件夹时,动态树不会加载所有子项。它只选择以前加载过的子项jQuery-动态树延迟加载和多层次(类型3)选择模式,jquery,dynatree,jquery-dynatree,Jquery,Dynatree,Jquery Dynatree,我正在使用dynatree,将selectMode设置为3(多层次)。我也使用复选框,所以当你选择一个文件夹时,它下面的所有子文件夹都会被选中 我已经(并且需要)启用了延迟加载 问题在于,在选择文件夹时,动态树不会加载所有子项。它只选择以前加载过的子项 我希望它在进行多层次选择之前进行必要的延迟加载,以获取所有可用的子项。如果我没有读错,那么您在“检查”父项时是否正在尝试“检查”子项?这不起作用,因为当使用惰性加载时,子对象还不存在 我通过检查我在惰性负载上添加的子项的父项是否为“选中”来解决这
我希望它在进行多层次选择之前进行必要的延迟加载,以获取所有可用的子项。如果我没有读错,那么您在“检查”父项时是否正在尝试“检查”子项?这不起作用,因为当使用惰性加载时,子对象还不存在 我通过检查我在惰性负载上添加的子项的父项是否为“选中”来解决这个问题。如果父项为“已选择”,则我加载已选择的子项 下面是一些代码供您查看。我正在从XMLHTTPREQUEST获取树数据。
treeArray[0]=父项密钥、treeArray[1]=子项密钥和treeArray[2]=子项标题
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]);
}
}
我通过在惰性阅读后强制选择父对象来解决此问题:
onLazyRead: function (node) {
if (!node.data.isLeaf) {
node.appendAjax({
success: function (node, event) {
node.toggleSelect();
node.toggleSelect();
}
});
}
}
我知道我来晚了一点,但我也找到了解决办法。希望它能帮助别人 首先,您需要一个树的
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();
}
}
});
}
这就是全部。当您选择(检查)一个节点时,它将递归地加载、检查和扩展其所有惰性子节点。可能是开始显示一些代码的好地方