【问题标题】:What's the right way to expand filtered nodes in ivh-treeview?在ivh-treeview中扩展过滤节点的正确方法是什么?
【发布时间】:2016-03-16 18:31:53
【问题描述】:

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

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

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

顺便说一句,不存在ivh-treeview 标签,所以我不能真正正确地标记它。如果我劫持了别人的标签,请道歉。也就是说,它似乎是用于其他 ivh-treeview 相关问题的标签。

【问题讨论】:

  • @jtrussell,根据您的要求,在此处标记您。

标签: treeview


【解决方案1】:

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

如果我必须这样做,我可能最终会在递归展开之前遍历树以从每个节点获取展开状态,然后在移除过滤器时恢复该状态。当有一个过滤器在播放时,这会破坏折叠/展开动作......你也可以处理它,但事情开始很快变得毛茸茸。例如:

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

希望有帮助!

【讨论】:

  • 状态问题是我与我的技术负责人讨论的问题,因为这是我们需要自己管理的问题——我对此并不十分兴奋。听起来这可能不值得实施。感谢您的回复。
猜你喜欢
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2019-01-02
  • 2020-02-13
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多