使用ajax时,Dynatree忽略select属性

Dynatree ignores select property when using ajax

本文关键字:忽略 select 属性 Dynatree ajax 使用      更新时间:2023-09-26

我正在使用dynatree插件来显示一个复选框树,使用多选择模式(模式3)。

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

当我再次点击复选框时,它会取消选择。似乎在后台,选择是不注册,直到我物理点击复选框。我想用这个节点加载树,这个节点已经选择了

我用来加载树的json对我来说很好;select属性对于所讨论的节点(根节点)为真。下面是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中的一个错误-或者可能是故意的行为,它试图太聪明。

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

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

这是dynatree中的一个错误-或者可能是故意的行为,它试图太聪明。

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

您可以使用以下代码:

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

}

Dynatree展开选定节点的父节点