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