jsTree在第二次刷新时失败

时间:2016-07-07 07:12:59

标签: javascript jquery jstree

我正在使用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

对于为什么会这样,我几乎一无所知。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

当您致电refresh()时,系统会取消选中当前所选节点,从而触发changed事件。如果没有选择节点,则data.nodenull(或undefined)。这就是为什么data.node.id也是undefined的原因。刷新树之后,再次选择节点,再次触发changed - 这次是节点对象可用。

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

答案 1 :(得分:0)

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

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