JsTree: как расширить все узлы при первой визуализации, а затем сохранить и восстановить состояние с помощью плагина 'cookies'

Я планирую использовать jsTree для визуализации древовидных структур, и я хотел бы добиться следующего поведения:

  • при первой визуализации Я хочу, чтобы все узлы были расширены.
  • любые последовательные визуализации будут восстанавливаться до предыдущего состояния древовидной структуры, используя плагин "cookie"

Ограничения:

  • Я использую json-объекты для заполнения дерева
  • Я не могу использовать атрибут "initial_open" для идентификаторов списков для первой визуализации, потому что будет сложно определить начальные идентификаторы

Другими словами, я хочу достичь чего-то похожего на: а) изменить состояние по умолчанию node на 'open' или b) определить, является ли это первой визуализацией (возможно, путем изучения атрибутов плагина cookie, если мы У меня не было состояния), и если да, тогда назовите 'open_all'

Идеи приветствуются. Спасибо!

Ответ 1

Чтобы развернуть все узлы, просто используйте

$("#treeView").jstree("open_all");

Вы можете включить его в начальную загрузку, например

$('#treeView').jstree(
{
    "themes": {
        "theme": "default",
        "dots": false,
        "icons": false
    },
    "plugins": ["themes", "html_data", "checkbox", "ui"]
}).jstree("set_theme", "apple")
.bind("loaded.jstree", function (event, data) {
    $(this).jstree("open_all");
});

Аналогично, если вы хотите проверить все элементы, используйте

$(this).jstree("check_all");

Что касается файлов cookie, я не использовал его, но есть плагин с именем jquery.cookie.js. Я полагаю, он содержит методы для загрузки/сохранения данных из/в файл cookie. Вы должны привязать другое событие, например

.bind("change_state.jstree", function (evt, data) { ... } );

чтобы зафиксировать изменение состояния, и начальная загрузка в событии loaded.jstree будет считываться из файла cookie. Пожалуйста, просмотрите эту ссылку, чтобы узнать больше о обработке файлов cookie, как указано - как вы можете использовать его с этим плагином или без него.

Ответ 2

Мэтт ответ все в порядке, но, поскольку речь идет о jstree v3, используйте событие ready.jstree, поэтому короткая короткая история:

$('#treeView').jstree(treeOptions) 
.bind("ready.jstree", function (event, data) {
     $(this).jstree("open_all");
});