我使用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] }
UPDATE
我以这种方式加载树:
$("#locationsTree").dynatree({ checkBox: true,selectMode: 3,initAjax: { type: "POST",url: dynaTreeInitUrl },classNames: { nodeIcon: "" } });
其中dynaTreeInitUrl是返回json的url.
如果我像这样硬编码JSON:
$("#locationsTree").dynatree({ checkBox: true,children: { "expand":true,"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作为另一个“模式”.