我正在使用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
。
对于为什么会这样,我几乎一无所知。有什么帮助吗?
答案 0 :(得分:1)
当您致电refresh()
时,系统会取消选中当前所选节点,从而触发changed
事件。如果没有选择节点,则data.node
为null
(或undefined
)。这就是为什么data.node.id
也是undefined
的原因。刷新树之后,再次选择节点,再次触发changed
- 这次是节点对象可用。
因此,在发送ajax查询之前,您需要检查是否确实选择了某个节点。
答案 1 :(得分:0)
在分配之前评估data.node
或data.selected
是否为空,
当刷新jstree时不要出错,你可以随时刷新。
if (data.node != null) {
var dataid = data.node.id;
}