【问题标题】:Click on jstree node, rebuild tree with that node as the root单击jstree节点,以该节点为根重建树
【发布时间】:2012-04-17 15:46:38
【问题描述】:

我认为这个主题相当清楚。 :)

我是 jstree 新手,尝试解析文档,但我得到了 有点坚持这个。我有以下代码:

$("#tree").jstree({
   "json_data" : {
       "data" : [
           tree.company
       ]
   },
   "themes" : {
       "theme" : "smb",
       "dots" : false,
       "icons" : true
   },
   "plugins" : [ "themes", "json_data", "ui" ]
}).bind("select_node.jstree", function (event, data) {
   $('#tree').jstree.refresh(data.inst.get_selected());  // FIXME
});

树加载并显示得很好,但是当我单击节点时 我想成为 displayed 树的新根,我得到一个 标记为 FIXME 的行出现错误。我试过各种各样的东西 不高兴,非常感谢一些帮助。我做错了什么?

【问题讨论】:

  • 你能比“我得到一个错误”更具体吗?什么错误?
  • 您使用的是哪个 jstree 插件?我问,因为有很多版本和我遇到的一些同名的不同插件。
  • @AnthonyGrist 错误是 Uncaught TypeError: Object function (settings) { ...
  • @RussC 我正在使用来自jstree.com 的最新版本(1.0 前已修复)。

标签: javascript jquery tree jstree


【解决方案1】:

我很确定您在该行收到错误的原因是因为您在该行中的语法有点偏离:

$('#tree').jstree.refresh(data.inst.get_selected());

试试这个:

$('#tree').jstree("refresh", data.inst.get_selected());

【讨论】:

  • 我试过了,好像触发了刷新事件,但是: 1)显示的树的根与开始时相同。我本来希望它是选定的节点。 2) 选中的节点丢失了所有的子节点。
  • 此外,即使触发了刷新事件,树并没有完全折叠。所以我不确定这是否算作“正确”的刷新。
【解决方案2】:

如果需要刷新整棵树,那么可以引用并刷新树的容器。

.bind("select_node.jstree", function (event, data) {
    $.jstree._reference(data.inst.get_container()).refresh(); //(data.inst.get_selected());  // FIXME
}).bind("refresh.jstree", function (event, data) {
    alert("Refreshed!");
});

如果只需要在select_node中引用节点: 数据.rslt.obj[0];

或者另一种获取方法(与上面相同的节点): $.jstree._reference(data.inst.get_container()).get_selected();

您可能还需要销毁和重建树: $.jstree._reference("#tree").destroy(); 我知道这可能看起来很浪费,但无论如何你都在替换根节点。

【讨论】:

  • 这比 mattytommo 的回答好一点,因为树刷新似乎重新绘制了所有内容(它完全折叠了)。另外感谢绑定到刷新事件的提示。但坏消息是,无论我使用 data.inst.get_selected() 还是 data.inst.get_container(),最终结果都是一样的。树的根和以前一样,不是我点击的节点。
  • 哦,我没有读到您希望单击的节点成为根节点。为什么不删除树并重新绘制一个新的? $.jstree._reference("#tree").destroy();然后调用第一次用于创建树的相同函数。您可能需要将 json 数据 tree.company 替换为另一个随节点单击而变化的变量。
  • 嗨,非常感谢,它确实有效 - 只有两个问题:1)这是唯一的方法吗?销毁和重绘似乎很浪费。 2)即使它没有包含确切的答案,我是否仍然批准您的答案帖子?如果您想使用销毁/重绘解决方案对其进行编辑或添加新帖子,我会批准。 PS我是新来的。 :)
  • 1) 到目前为止,是的。我也在问同样的问题,我一直认为破坏是我找到的最佳解决方案。 2) 是的,请批准此解决方案。人们会看到我们的 cmets 并弄清楚 :) 我将更新解决方案以包含销毁解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多