ExtJS - Сохранить состояние treePanel. - PullRequest
1 голос
/ 27 мая 2010

TLDR Я хочу, чтобы моя древовидная панель из EXTJS запомнила свои предыдущие настройки. ExtJS-3.2.1


Я уже видел это для ExtJS-2.x.x: Смотрите здесь на форумах extjs .
Но, как видно, они в значительной степени безжизненны, там есть темы, задающие этот вопрос или аналогичные, без ответа в течение 6 месяцев. Я думал, что принесу это сюда.

Мне нужно, чтобы моя 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 Ответ

1 голос
/ 27 мая 2010

Я знаю, что это точно не ответит на все ваши вопросы, но я сделал это в последнее время, главным образом, на стороне сервера. Важно знать, что даже если вы используете AsyncTreeNodes, вы все равно можете указать в узлах свойство children, которое будет содержать другой массив узлов.

Итак, в функции URL-адреса, вызываемой экземпляром TreeLoader моей TreePanel, я сохранил «путь» узла, загружаемого в базу данных (нам нужно было сохранить это состояние на сервере). Поэтому я сохраняю в этой базе данных, какой уровень и значение загруженного узла и его родителей.

Для этого я добавил слушателя в событие загрузчика 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. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...