ExtJS - 保存treePanel的状态。

时间:2010-05-27 04:53:23

标签: javascript extjs savestate

TLDR 我希望EXTJS的treepanel能够记住以前的设置。 ExtJS的-3.2.1


我之前已经看过ExtJS-2.x.x:See here on the extjs forums
但是看起来他们几乎没有生气,有线程在那里提出这个问题或类似的问题而且没有回复长达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?

1 个答案:

答案 0 :(得分:1)

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

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

为此,我在loaderLoad事件中添加了一个监听器,并在loader的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中给孩子们。 希望这有帮助!