在ivh-treeview中扩展过滤节点的正确方法是什么?

时间:2016-03-16 18:31:53

标签: treeview

根据讨论here,当过滤树并且叶子节点与过滤器匹配时,当前ivh-treeview Angular库不会展开折叠节点。

实现此行为的正确方法是将ng-change处理程序添加到用于过滤器文本的input元素,然后查询包含控制器中的树(因此,手动执行) ?

似乎没有任何其他机制来检测过滤器是否已更改。

顺便说一句,没有ivh-treeview标签,所以我无法正确标记。如果我劫持了别人的标签,我会道歉。这说它似乎是用于其他ivh-treeview相关问题的标签。

1 个答案:

答案 0 :(得分:1)

恐怕真的没办法优雅地做到这一点。当您检测到过滤器非空(或超过某个阈值)时,您可以做的最好是扩展整个树(使用expandRecursive)。通过完全展开树,您可以通过ivhTreeview隐藏其他所有内容来“显示已过滤的节点”。这很容易。困难的部分是,当不再有过滤器时,如何将树恢复到之前的部分扩展状态。

如果我不得不这样做,我可能会在递归展开之前最终走向树以从每个节点获取展开状态,然后在删除过滤器时恢复该状态。这会破坏崩溃/扩展动作,而游戏中有一个过滤器...你也可以处理它,但事情开始很快变得毛茸茸。 E.g:

var isExpanded = ivhTreeviewOpts().expandedAttribute

// When the filter becomes non-empty
ivhTreeviewBfs(myTree, function(node) {
  node.savedExpandedState = n[isExpanded]
})
ivhTreeviewMgr.expandRecursive(tree)

// When the filter becomes empty
ivhTreeviewBfs(myTree, function(node) {
  node[isexpanded] = node.savedExpandedState
})

这是一个粗略的演示:http://jsbin.com/jijoma/3/edit?html,js,output

希望有所帮助!