我正在使用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: ""
    }
});

有用。 :/

更新:

我发现了为什么会这样:

它是动态树中的一个错误-或它试图变得太聪明时的预期行为。

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

最佳答案

我发现了为什么会这样:

它是动态树中的一个错误-或它试图变得太聪明时的预期行为。

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

10-08 10:53
查看更多