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>
对于我的情况,问题已解决!
我们正在使用 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>
对于我的情况,问题已解决!