删除jstree中的根节点会分离事件侦听器

时间:2015-01-07 17:26:55

标签: javascript root jstree children destroy

我想通过删除所有根节点并使用ajax读回结构来重新创建jstree。如果我使用:

$("#tree").jstree("destroy");

然后重新创建jstree实例:

$("#tree").jstree({ "core": {"check_callback" : true} });

它绘制了一个新的jstree。我添加了来自ajax的json信息,但是当我点击根节点时,事件监听器不再工作。

这是可行的解决方法例程:

var ref = $("#tree").jstree(true);          // get an existing instance
var nodes = ref.get_node("#").children; // -1 didn't work, so I used "#"
while (nodes.length > 0){
  ref.delete_node(nodes[0]);
}

" destroy"是否缺少任何参数?允许事件侦听器与新的jstree实例连接回来的方法?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的,因为destroy函数“从DOM中删除所有jstree的痕迹并销毁所有实例”(jstree documentation):这意味着组成jstree的jquery对象实际上是删除了,他们带走了所有的事件监听器。

我不知道你想要完成什么,但是如果你需要使用destroy,你将不得不在重新创建树之后再次重新添加所有的监听器。

否则你应该尝试找到一种非破坏性的方式来做你的东西,通常只有一种,除极少数情况外,核武选项绝不是一个好主意。