jsTree: как выбрать узел после обновления

#javascript #jquery #jstree

#javascript #jquery #jstree

Вопрос:

У меня есть jsTree jQuery, заполняемый с сервера с помощью вызова ajax. Когда я добавляю новый узел, я выполняю вызов ajax, а затем выполняю вызов для обновления дерева с помощью tree.jstree("refresh") . После обновления я хочу выбрать узел, который я только что добавил. К сожалению, похоже, что нет обратного вызова, который можно было бы передать этой команде. Есть ли какой-нибудь чистый способ сделать это?

Комментарии:

1. вы добавляете узел в качестве последнего узла или промежуточного дерева?

Ответ №1:

о, столько времени прошло с этого поста … и все еще не смог найти ответ в Интернете. Итак, после нескольких часов … нет, нет, не это, придумал решение

 var jsTreeId = '#jstree'; // or whatever name the jstree has
var jsTreeSelectedItemId = 5; // just an example
var selectedNode = $('#node_' jsTreeSelectedItemId);
var parentNode = $.jstree._reference(jsTreeId)._get_parent(selectedNode);
  

// теперь допустим, что вы добавляете новый узел со стороны сервера, вы получаете новый идентификатор созданного узла с помощью вызова ajax, и затем вы хотите обновить дерево, чтобы отобразить его, а также выбрать его

 var newSelectId = 9; // or from ajax call
// call the refresh function, which is asnyc
$.jstree._reference(jsTreeId).refresh(parentNode); 
 // set the magic "to_select" variable with an array of node ids to be selected
// note: this must be set after refresh is called, otherwise won't work
$.jstree._reference(jsTreeId).data.ui.to_select = ['#node_' newSelectId];
  

Ответ №2:

 $('#tree').jstree("select_node", '#1', true);
//other node are deselected if pass last argument as true.

$('#tree').jstree("select_node", '#1', false);
//other node are selected and new one also selected.