Получить дочерний узел, щелкнув родительское имя jsTree

Я получаю свое дерево через файл Json, и это выглядит так

root > parent1 > parent > child1 : child2 : child3 : etc

Я добавил eventHandler и для некоторых дочерних элементов, и по щелчку я получаю некоторые вещи, такие как таблицы, информацию и т. д. Проблема в том, что когда я нажимаю на child1, я хочу добавить еще одну ветвь дерева из другого файла json. Я взял пример из документации jsTree

$('#tree').jstree({
'core' : {
  'data' : {
    'url' : function (node) {
      return node.id === '#' ?
        'ajax_roots.json' :
        'ajax_children.json';
    },
    'data' : function (node) {
      return { 'id' : node.id };
    }
  }
});

и настроить его на мой код...

var $industry = $('#industry');
$industry.jstree({
    "core" : {
        "animation" : 0,
        "check_callback" : true,
        "themes" : {
            "dot": true,
            "stripes" : true,
            "responsive": false
        },
        'data' : {
            'url' : function (node) {
                return node.id === '#' ?
                    'data/industry.json' :
                    'data/SDTM.json';
            },
            'data' : function (node) {
                return { 'id' : node.id };
            }
        }
    }});

затем я добавил обработчик событий для дочернего элемента, который я хочу объединить

 // ===== Click event on node =====
    for(var i = 0; i < data.selected.length; i++) {
        var node = data.instance.get_node(data.selected[i]).text;
        if (node == "SDTM 3.1.1"){
            //console.log(node);
            $.jstree._reference($industry)
                .create_node(
                    'select_node.jstree', 'after',
                    { state: 'open', data: 'data/SDTM.json' }
                );        }
    }
})
.jstree();

и в консоли я получаю следующую ошибку

Uncaught TypeError: $.jstree._reference is not a function

Что я делаю не так?


person Anton    schedule 29.02.2016    source источник
comment
Как дела? Вы решили это?   -  person Nikolay Ermakov    schedule 01.03.2016


Ответы (1)


Я бы сделал это так:

for (var i = 0; i < data.selected.length; i++) {
    var node = data.instance.get_node(data.selected[i]),
        nodeText = node.text;

    if (nodeText == "SDTM 3.1.1") {
        //console.log(node);

        // get data for the branch, need to write code here
        var branchJson = ... data/SDTM.json
        /*
        branchJson should contain an array of objects,
        each object may have keys like below

        {
            text        : 'Node text'
            children    : [...],
            state       : { 'open' }
        }

        */

        // iterate nodes in received json
        branchJson.forEach( function(obj) {
            data.instance.create_node( node, obj, 'after' );    
        })

    }
}
person Nikolay Ermakov    schedule 29.02.2016