我知道这并不能完全回答你所有的问题,但我最近做的这些工作大部分都是在服务器端完成的。关键是要知道,即使使用AsyncTreeNodes,您仍然可以在节点中指定
children
将包含另一个节点数组的属性。
因此,在我的treepanel的treeloader实例调用的url函数中,我确保将要加载的节点的“路径”保存到数据库中(对我们来说,关键是在服务器上保持这种状态)。所以我把加载的节点及其父节点的级别和值保存在数据库中。
为此,我在加载之前向加载程序添加了一个侦听器,并在加载程序的baseparams属性中设置该信息。
然后我做了这样的处理:如果加载根节点的子节点,那么服务器上装载程序调用的这个相同的函数也会递归地调用自己来收集子节点(基于我在数据库中保存的内容)。因此,返回到根节点加载程序的实际JSON如下所示:
[
{
"x3id": "",
"text": "[blank value]",
"iconCls": "",
"leaf": false,
"expanded": true,
"children": [
{
"x3id": "",
"text": "[blank value]",
"iconCls": "",
"leaf": false,
"expanded": true,
"children": [
{
"x3id": "",
"text": "[blank value]",
"iconCls": "",
"leaf": false,
"expanded": true,
"children": [
{
"x3id": false,
"text": "False",
"iconCls": "",
"leaf": false,
"expanded": true,
"children": [
{
"x3id": 0,
"text": "0",
"iconCls": "fakeleaf",
"leaf": true,
"expanded": true,
"children": [
],
"expandable": false
},
{
"x3id": 1,
"text": "1",
"iconCls": "fakeleaf",
"leaf": true,
"expanded": true,
"children": [
],
"expandable": false
}
]
}
]
}
]
}
]
},
{
"x3id": "Wed, 19 May 2010 16:17:00 -0400",
"text": "05/19/2010 04:17:00 PM",
"iconCls": "",
"leaf": false,
"expanded": false,
"children": ""
}
]
请注意,状态将只记住最后一个“已加载”节点,而不必记住最后一个选定和/或打开的节点。要做到这一点,你必须听TreePanel的Click事件或其他什么来保存信息。
因此,当然,这不会处理我认为您正在使用的复选框,但是如果您侦听正确的事件,则可以回调服务器以保存此信息,然后添加
checked
属性设置为初始JSON中的子级。
希望这有帮助!