У меня хорошо работает реализация jsTree на моем проекте. Данные JSON предоставляются PHP / Ajax. У меня возникли проблемы при использовании плагина поиска.
Документация по поисковым плагинам jsTree гласит:
поэтому в вашем ответе вы должны вернуть путь к узлу (без самого узла) в качестве идентификаторов: ["#root_node", "# child_node_3"]
… поэтому функция поиска на стороне сервера возвращает путь к подобранному узлу (да, я его json_encode
):
Array( '#1', '#2', '#3', '#5' ); // to match node #10 (leaf node) at the end
Когда эти значения уже существуют в DOM, функция поиска на стороне клиента работает нормально, но мне не удается заставить jsTree следовать маршруту, указанному в этом массиве (или массивах), чтобы заполнить деревья, когда элементы еще не существуют (например, когда открыт только корневой узел).
Я видел подобные вопросы на Stack, но ни у кого нет ответов. Я переписываю, потому что мне нужно понять, как это работает, и не нашли много информации мимо документов плагина поиска о том, как использовать jsTree с асинхронным поиском.
По сути, я хочу, чтобы он использовал массив, возвращаемый функцией поиска, чтобы запустить событие загрузки jsTree (что-то вроде load_node_json
). Я бы подумал, что это должно работать прямо из коробки, но у меня проблемы с ним. Я почти полностью подключил код примера из документации jsTree.
Я понял это. Моя проблема заключалась в том, что я возвращал несколько массивов, содержащих путь к каждому подобранному узлу, например:
Array( Array('#root', '#child', '#sub-child'), Array('#root', '#child', '#second-sub') )
Как оказалось, поисковый плагин jsTree ожидает только одноуровневый массив, а B будет загружать все узлы, перечисленные в этом массиве, порядок маршрутов не должен быть абсолютно точным, как может показаться в документации.
Поэтому вместо этого в моем JSON я возвращаю массив, содержащий уникальные идентификаторы узлов, например:
Array( '#root', '#child', '#sub-child', '#second-sub' )
… и плагин поиска загружает узлы, как ожидалось.
Ничего особенного в конце, но я думаю, что документация jsTree должна быть более описательной в этом вопросе, поскольку я видел других с той же проблемой и ответов.