Ответ 1
В версии 3 вы можете перезагрузить дерево:
$('#treeId').jstree(true).settings.core.data = newData;
$('#treeId').jstree(true).refresh();
Итак, мой вопрос. Я инициализировал свое дерево некоторыми данными:
$('#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 → создать новый экземпляр (он работает, но это повлияет на производительность))
В версии 3 вы можете перезагрузить дерево:
$('#treeId').jstree(true).settings.core.data = newData;
$('#treeId').jstree(true).refresh();
Попробуйте включить параметр 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');
.
refresh()
обновит исходное состояние дерева, что означает, что вновь созданные узлы удалены
Вы хотите redraw(true)