除非单击,否则不会填充HTML

时间:2017-12-15 11:11:01

标签: jquery html5 fancytree

我创建一个非常简单的fancytree对象,为了解释它只有一个节点和4个孩子,只有一个级别而且我不使用lazyLoad。

在运行时的代码中我看到,直到我没有点击节点来扩展它,孩子的html代码不存在,它在FancyTree lib的javascript init部分。一旦打开或关闭节点,childern的html就会出现不同的css类来隐藏/显示它们。

我知道我可以强制在加载树后让节点可见,但是我需要关闭它们,并且已经在html中填充了所有子节点。 我想我可以解析所有节点并打开和关闭它们,但我想知道是否有更好的解决方案。

这是一个简单的例子:

 SOURCE = [
    {title: "node 1", folder: true, expanded: true, children: [
      {title: "node 1.1", foo: "a"},
      {title: "node 1.2", foo: "b"}
     ]},
    {title: "node 2", folder: true, expanded: false, children: [
      {title: "node 2.1", foo: "c"},
      {title: "node 2.2", foo: "d"}
     ]}
  ];
    $("#tree").fancytree({
        clickFolderMode: 2,
        selectMode: 1,
        keyboard: false,
        source: SOURCE
    });

目前我想出了这个解决方法:

首先,我打开所有节点:

var tree = $("#tree").fancytree("getTree");
tree.visit(function (node) {
    node.setExpanded(true);
});

然后我关闭它们:

  tree.visit(function (node) {
    node.setExpanded(false);
});

1 个答案:

答案 0 :(得分:1)

Fancytree仅在需要时呈现html元素。 你可以使用

tree.render(true, true);

迫使这个。请参阅此处details