Fancytree - 当节点有子节点时设置文件夹属性

Fancytree - Set folder attribute when node has children

我们正在使用 Fancytree (https://github.com/mar10/fancytree/) 作为我们的在线帮助系统。

我在示例中看到,当设置 folder 属性时,节点可以自动拥有一个文件夹图标,或者通过 HTML object class (class="folder") 或通过 JSON ("folder": true)。

但我想在节点有子节点时设置 folder 属性。

我已经尝试了几种方法,但都没有成功。当 node.hasChildren 为真时,我尝试将 node.folder 设置为真,在 createNode 事件、renderNode 事件上尝试过, loadChildren 事件,并尝试在 init 事件上访问所有节点。

有什么想法吗?

我终于自己找到了解决办法!我记得 FancyTree 文档 (https://github.com/mar10/fancytree/wiki/TutorialLoadData) 中的示例,我可以 post-process 正在加载的数据并使用 postProcess 事件对其进行转换,那就是我做了什么。

因此,我遍历列表中的项目,搜索具有 children 元素的项目,将 folder 属性设置为 true。但是这个函数必须是递归的,所以我可以检查 children 的 children 等等。

让我们来看代码:

<script type="text/javascript">
   function checkNodesForChildren(nodes) {
      $.each(nodes, function (index, node) {
         if (node.children) {
            node.folder = true;
            checkNodesForChildren(node.children);
         };
      });
   }

   $(function () {
      $("#tree").fancytree({
         source: {
            url: "/Ajuda.json", 
            contentType: "application/json; charset=iso-8859-1"
         },

         postProcess: function (event, data) {
            checkNodesForChildren(data.response);
         }
      });
   });
</script>

对于我的情况,问题已解决!