Подтвердить что ты не робот

Как перерисовать дерево jstree с новыми данными?

Итак, мой вопрос. Я инициализировал свое дерево некоторыми данными:

$('#tree').jstree({
    'core' : {
        'data' : [
            'Simple root node',
            {
                'id' : 'node_2',
                'text' : 'Root node with options',
                'state' : { 'opened' : true, 'selected' : true },
                'children' : [ { 'text' : 'Child 1' }, 'Child 2']
            }
        ]
    });

Но после некоторых действий я хочу перерисовать дерево новыми данными. Я пытаюсь использовать методы refresh и redraw из API, но это безуспешно.

Можете ли вы дать мне совет, как обновить дерево (без destroy → создать новый экземпляр (он работает, но это повлияет на производительность))

4b9b3361

Ответ 1

В версии 3 вы можете перезагрузить дерево:

$('#treeId').jstree(true).settings.core.data = newData;
$('#treeId').jstree(true).refresh();

Ответ 2

Попробуйте включить параметр check_callback в свои основные настройки (включая начальную загрузку) и убедитесь, что для него установлено значение true. Затем вы сможете увидеть любые сделанные изменения. Без этого я обнаружил, что не вижу заменяющих данных, а только исходных данных.

$('#tree').jstree({
'core' : {
    'check_callback' : true,
    'data' : [
        'Simple root node',
        {
            'id' : 'node_2',
            'text' : 'Root node with options',
            'state' : { 'opened' : true, 'selected' : true },
            'children' : [ { 'text' : 'Child 1' }, 'Child 2']
        }
    ]
});

Это обработало часть обновления для меня, но в зависимости от того, что вы делаете, вы также можете вызвать $('#tree').jstree('refresh');.

Ответ 3

refresh() обновит исходное состояние дерева, что означает, что вновь созданные узлы удалены

Вы хотите redraw(true)