Javascript 使用ajax时,Dynatree会忽略select属性

Javascript 使用ajax时,Dynatree会忽略select属性,javascript,jquery,ajax,json,dynatree,Javascript,Jquery,Ajax,Json,Dynatree,我使用dynatree插件显示复选框树,使用多选模式(模式3) 当使用ajax(无延迟加载)初始化树时,似乎忘记了一些节点是最初选择加载的。当我选择其中一个节点时,传递给onSelect处理程序的标志值为true,即:它认为我要选择节点 当我再次单击复选框时,它将取消选择。似乎在后台,直到我实际单击复选框,选择才被注册。我想加载已选择此节点的树 我用来加载树的json看起来很好;对于所讨论的节点(根节点),select属性为true。以下是JSON的一个片段: { "expand":true,

我使用dynatree插件显示复选框树,使用多选模式(模式3)

当使用ajax(无延迟加载)初始化树时,似乎忘记了一些节点是最初选择加载的。当我选择其中一个节点时,传递给onSelect处理程序的标志值为true,即:它认为我要选择节点

当我再次单击复选框时,它将取消选择。似乎在后台,直到我实际单击复选框,选择才被注册。我想加载已选择此节点的树

我用来加载树的json看起来很好;对于所讨论的节点(根节点),select属性为true。以下是JSON的一个片段:

{
"expand":true,
"title":"All",
"isFolder":false,
"key":"0",
"isLazy":false,
"addClass":null,
"select":true,
"unselectable":false,
"children": [... omitted for clarity]
}
更新

我以这种方式加载树:

$("#locationsTree").dynatree({
    checkbox: true,
    selectMode: 3,
    initAjax: {
        type: "POST",
        url: dynaTreeInitUrl
    },
    classNames:
    {
        nodeIcon: ""
    }        
});
其中dynaTreeInitUrl是返回json的url

如果我像这样硬编码JSON:

$("#locationsTree").dynatree({
    checkbox: true,
    selectMode: 3,
    children: {
        "expand":true,
        "title":"All",
        "isFolder":false,
        "key":"0",
        "isLazy":false,
        "addClass":null,
        "select":true,
        "unselectable":false,
        "children": [{
            "expand": true,
            "title": "Child",
            "isFolder": false,
            "key": "1",
            "isLazy": false,
            "addClass": null,
            "select": true,
            "unselectable": true,
            "children": []
        }]
    },
    classNames:
    {
        nodeIcon: ""
    }        
});
它起作用了/

更新:


我发现了发生这种情况的原因:

这是dynatree中的一个bug,或者是它试图变得太聪明的预期行为


如果子节点具有unselectable=true,则加载子节点时将取消选择父节点,即使父节点具有select=true。这使得不可能创建一个树,其中选择是分层的,即:如果选择了父级,则所有子级都将自动选择,并且不能取消选择。我想这可以作为另一种“模式”添加到dynatree中。

我发现了发生这种情况的原因:

这是dynatree中的一个bug,或者是它试图变得太聪明的预期行为


如果子节点具有unselectable=true,则加载子节点时将取消选择父节点,即使父节点具有select=true。这使得不可能创建一个树,其中选择是分层的,即:如果选择了父级,则所有子级都将自动选择,并且不能取消选择。我想这可以作为另一种“模式”添加到dynatree中。

您可以使用以下代码:

onPostInit: function() {
$.map(this.getSelectedNodes(), function(node){
    node.makeVisible();
});
}


您能设置一个演示页面吗?我会尝试一下,但是,问题只有在我使用ajax加载树时才会出现-如果我使用children属性对json数据进行硬编码,它就可以完美地工作。我不知道如何在jsFiddle或类似的工具中复制ajax调用。jsFiddle有一个用于测试ajax的echo服务,文档是这样的。我自己设置了这个演示,但我相信你会得到更多的帮助。我相信这只是为了测试对$.ajax/$.get调用的延迟响应,等等。我需要dynatree来完成调用-请参阅更新…续。。。我尝试调用echo uri,然后将json响应放到children属性中,但我无法复制导致错误的条件-即:dynatree自己进行调用。