在ivh-treeview中展开过滤节点的正确方法是什么?
What's the right way to expand filtered nodes in ivh-treeview?
根据讨论 here,目前 ivh-treeview Angular 库在树被过滤且叶节点与过滤器匹配时不会展开折叠的节点。
实现此行为的正确方法是将 ng-change
处理程序添加到用于过滤文本的 input
元素,然后查询包含控制器中的树(因此,这样做手动)?
似乎没有任何其他机制可以用来检测过滤器是否已更改。
顺便说一句,不存在 ivh-treeview
标签,所以我无法正确地标记它。如果我劫持了别人的标签,我深表歉意。那就是说它似乎是用于其他 ivh-treeview 相关问题的标签。
恐怕真的没有办法优雅地做到这一点。当您检测到过滤器非空(或超过某个阈值)时,您可以做的最好的事情是展开整个树(使用 expandRecursive
)。通过完全展开树,您可以得到 "show filtered nodes",因为其他所有内容都被 ivhTreeview 隐藏了。这是最简单的部分。困难的部分是当不再有过滤器时,你如何将树恢复到它之前的部分展开状态。
如果我必须这样做,我可能最终会在递归扩展之前遍历树以从每个节点获取扩展状态,然后在删除过滤器时恢复该状态。这会破坏 collapse/expand 动作,而有一个过滤器在起作用......你也可以处理它,但事情很快就会变得毛茸茸。例如:
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
希望对您有所帮助!
根据讨论 here,目前 ivh-treeview Angular 库在树被过滤且叶节点与过滤器匹配时不会展开折叠的节点。
实现此行为的正确方法是将 ng-change
处理程序添加到用于过滤文本的 input
元素,然后查询包含控制器中的树(因此,这样做手动)?
似乎没有任何其他机制可以用来检测过滤器是否已更改。
顺便说一句,不存在 ivh-treeview
标签,所以我无法正确地标记它。如果我劫持了别人的标签,我深表歉意。那就是说它似乎是用于其他 ivh-treeview 相关问题的标签。
恐怕真的没有办法优雅地做到这一点。当您检测到过滤器非空(或超过某个阈值)时,您可以做的最好的事情是展开整个树(使用 expandRecursive
)。通过完全展开树,您可以得到 "show filtered nodes",因为其他所有内容都被 ivhTreeview 隐藏了。这是最简单的部分。困难的部分是当不再有过滤器时,你如何将树恢复到它之前的部分展开状态。
如果我必须这样做,我可能最终会在递归扩展之前遍历树以从每个节点获取扩展状态,然后在删除过滤器时恢复该状态。这会破坏 collapse/expand 动作,而有一个过滤器在起作用......你也可以处理它,但事情很快就会变得毛茸茸。例如:
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
希望对您有所帮助!