jsTree 在第二次刷新时失败

jsTree fails on second refresh

本文关键字:失败 刷新 第二次 jsTree      更新时间:2023-09-26

我正在使用 jsTree 插件,发现在我第二次调用 refresh() 时,树将保持错误/加载状态。这是代码:

.on('changed.jstree', function (e, data) {
    var i, j, selectedNode;
    selectedNode = data.node;
    currentlySelectedNodeGUID = selectedNode.id;
    //for (i = 0, j = data.selected.length; i < j; i++) {
    //    selectedNode = data.instance.get_node(data.selected[i]);
    //    currentlySelectedNodeGUID = selectedNode.id;
    //}
    $.ajax({
        url: '@Url.Action("LocationProperties","Location")',
        type: 'GET',
        data: { id: currentlySelectedNodeGUID },
        success: function (result) {
            $('#locationPropertiesPartial').html(result);
        },
        error: function (e) {
            alert(e);
        }
    });
});

发现的唯一问题是我收到此错误 Uncaught TypeError: Cannot read property 'id' of undefined在这一行currentlySelectedNodeGUID = selectedNode.id;.

但是,数据就在那里,data.node确实包含一个id属性,并且确实有一个值,该值被分配给currentlySelectedNodeGUID

我几乎不知道为什么会发生这种情况。请帮忙吗?

当您调用refresh()时,将取消选择当前选定的节点,这将触发changed事件。当没有选择节点时data.node null(或undefined)。这就是为什么data.node.id也是undefined.刷新树后,节点再次被选中,这将再次触发changed - 这次节点对象可用。

因此,在发送 ajax 查询之前,您需要检查是否确实选择了节点。

在分配之前评估data.nodedata.selected是否为空,刷新 JSTREE 时不要出错,您可以随时刷新。

if (data.node != null) {
   var dataid = data.node.id;
}