2016-09-27 3 views
2

У меня есть jsTree, который, когда пользователь нажимает на узел, запускает событие select_node. Однако у меня также есть список, содержащий некоторые записи с идентификатором узлов в jsTree. При выборе записи в этом списке мне нужно только выбрать узел из дерева, но без запуска события select_node. В соответствии с документацией, select_node апи имеет 3 параметра
Выберите узел jsTree без запуска select_node event

https://www.jstree.com/api/#/?q=(&f=select_node(obj [, supress_event, prevent_open])

OBJ: смешанный массив может быть использован для выбора нескольких узлов
supress_event: Boolean, если установлено значение truechanged.jstree Событие не будет запущено
prevent_open: Boolean, если установлены true родителей выбранного узла не будет открыты

Однако это не говорит о подавлении select_node события. Какие-либо предложения?

+0

Почему вы хотите предотвратить это событие от обстрела? –

+0

Потому что я хочу выбрать эту запись, чтобы выделить ее, когда выбор сделан из списка. – KNP

+0

Я думаю, вы должны опубликовать свой код, лучше jsFiddle, чтобы сделать ваш вопрос яснее –

ответ

2

Я вижу два варианта здесь:

  1. временно отключить select_node обработчик событий, пока вы вручную выбрать узел из кода.
  2. Используйте событие changed вместо события select_node и используйте флаг supress.
+1

[2] работает для меня – vikyd

0

Я не знаю, если есть лучший способ, чтобы вытащить его, но вот как я это сделал:

Вместо того, чтобы использовать функцию select_node, я написал функцию, которая принимает идентификатор узла а затем открывает его, устанавливает его как выбранный, а затем рекурсивно открывает родительские узлы.

$('#TreeDiv').jstree(true).open_node(actualId); 
$('#TreeDiv').jstree(true).get_node(actualId).state.selected = true; 
var parent = $('#TreeDiv').jstree(true).get_parent(actualId); 
while (parent.length > 0) { 
    $('#TreeDiv').jstree(true).open_node(parent); 
    parent = $('#TreeDiv').jstree(true).get_parent(parent); 
} 
Смежные вопросы