Tree_view 读取后未定义 kendo 树

Tree_view undefined after read kendo tree

这是我的问题:

我第一次加载我的树来显示他。 我可以更改会话文件名的值 "state" 以启用或禁用我的树中的节点。

但是在我更改数据库中的 ne 值和 return JSON 后,我再次读取树以使用更改刷新我的树,但失败并在控制台中写入: “类型错误:Tree_view.getElementsByClassName(...)[0].children[(item.id_perso - 1)].children[1] 未定义”。

我不明白的是我第一次通过这些函数并且它运行良好,但是当我重新加载时它显然失败了,因为它未定义。

感谢您的帮助。

    $(document).ready(function() {
    $('#Tree_view').kendoTreeView({
        template: "#= item.name #",
        dataSource: Parcours,
        dataTextField: 'name',
        loadOnDemand: true,
        expand: onExpandedItem
    });
});

function onExpandedItem(e) {

    var id_user = @Model.id;

    var item =  $('#Tree_view').data('kendoTreeView').dataItem(e.node);
    var treeview = $('#Tree_view').data('kendoTreeView');
    var type = item.fields.type;

    if (item.level() > 0) {
        item.id_parcours = item.parentNode().id_parcours;
        if (item.level() == 2) {
            item.id_promo = item.parentNode().id;
        }
    }
    else item.id_parcours = item.Id;

    switch (type) {
        case 'parcours':
            item.children.transport.options.read = {
                url: '@Url.Action("Get_Session", "Users")' + '?user_id=' + id_user,
                dataType: "json",
            };
            break;

        case 'session':
            item.children.transport.options.read = {
                url: '@Url.Action("Get_Matiere")' + '?user_id=' + id_user,
                dataType: "json"
            };
            break;

        default:
            break;
    }

    if (item.level() == 0) {
        setTimeout(function() { waitDisable(item, treeview); }, 1000);
    }
}

function waitDisable(item, treeview) {
    if (item.fields.type == "parcours")
    {
        var node = Tree_view.getElementsByClassName('k-group')[0].children[item.id_perso - 1].children[1].children;
        for (i = 0; i < item.children._data.length; i ++)
        {
            if (item.children._data[i].state != null) {
                node[i].children[0].children[1].className = "k-in k-state-disabled";
                node[i].children[0].children[0].className = ".k-icon-remove";
            }
            else node[i].children[0].children[0].className = "k-icon k-plus";

            addRow(node, item, i, treeview);
        }
    }
}

var cmp = 0;
var One_Time = false;

function addRow(node_Here, item, i, treeview) {

    var actual_row = node_Here[i].children[0];
    if (actual_row.childNodes.length < 3) {
        var newSpan = document.createElement('button');
        if (item.children._data[i]._childrenOptions.data.state != null) {
            newSpan.appendChild(document.createTextNode("Re-Up"));
            newSpan.className = "change_state btn btn-success btn-xs";
        }
        else {
            newSpan.appendChild(document.createTextNode("Down"));
            newSpan.className = "change_state btn btn-danger btn-xs";
        }
        actual_row.appendChild(newSpan);
    }
    cmp += 1;
    if (cmp == item.children._data.length)
        One_Time = true;
    if (One_Time) {
        addClickListner(item, i, treeview);
        One_Time = false;
        cmp = 0;
    }
}

function addClickListner(item, i, treeview) {
    $(".change_state").click(function (event) {
        var name_Promo_Rm = event.target.parentNode.children[1].textContent;
        var User_Select = event.view.Parcours.transport.read.data.user_id;
        $.ajax({
            url: '@Url.Action("ChangeStatutBase", "Users")',
            type: 'GET',
            dataType: 'json',
            data: { Name_Promo: name_Promo_Rm, User_id: User_Select },
        });
        refreshTree(treeview);
    })
}

// Refresh tree
function refreshTree(treeview) {
    // Save open items
    saveExpandedItems(treeview);
    // Reload data source
    treeview.dataSource.read();
    // Load open items
    console.log("OKKKKKKK");
    setTimeout(loadExpandedItems(), 600);

}

我已经解决了我的问题,在底部的 "setTimeout" 我在第一个参数中放置了“()”并且它没有放置暂停并且数据没有时间待加载。