1

TLDR我希望 EXTJS 的树形面板记住它以前的设置。ExtJS-3.2.1


我之前已经为 ExtJS-2.xx 看到过此操作:请参阅 extjs 论坛上的此处
但正如他们所看到的那样,它们几乎毫无生气,那里有线程问这个问题或类似的问题,长达 6 个月没有回复。我以为我会把它带到这里。

我需要能够让我的 treePanel 记住以前打开的文件夹以及选中了哪些框。它是异步 treePanel。请注意,这都是客户端脚本。

面板如下:

 var layerTree = new Ext.tree.TreePanel({
   border: true,
   region: "east",
   title: 'LayersTree',
   width: 250,
   split: true,
   collapsible: true,
   collapsed: true,
   iconCls: 'treePanelIcon',
   enableDD: true,
   autoScroll: true,
   //pulls in layers and their attributes//
   root: new Ext.tree.AsyncTreeNode({ leaf: false,
     loaded: false,
     expanded: true,
     text: 'Tree Root',
     children: treeLayers
   })

我正在使用 ExtJS-3.2.1、GeoExt、OpenLayers。

有人做过这个或知道怎么做吗?(在 extjs-3.2.1 中)
(最好使用插件,但感谢任何答案)

有人知道如何使用extjs的保存状态功能绑定到cookie吗?

4

1 回答 1

1

我知道这不会完全回答您的所有问题,但我最近主要在服务器端完成了这项工作。要知道的关键是,即使您使用 AsyncTreeNodes,您仍然可以在节点中指定children将包含另一个节点数组的属性。

因此,在我的 TreePanel 的 TreeLoader 实例调用的 URL 函数中,我确保将正在加载的节点的“路径”保存在数据库中(我们的重点是将这种状态保存在服务器上)。所以我在那个数据库中保存了加载节点的级别和值以及它的父节点。

为此,我在加载程序的 beforeLoad 事件中添加了一个侦听器,并将该信息设置在加载程序的 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 的单击事件或其他内容以保存该信息。

因此,这当然不会处理我认为您正在使用的复选框,但是如果您侦听正确的事件,您可以回调服务器以保存此信息,然后将checked属性添加到初始 JSON 中的子项。希望这可以帮助!

于 2010-05-27T16:10:49.317 回答