过滤时的Fancytree scrollIntoView

时间:2015-02-06 09:37:04

标签: jquery fancytree

我正在使用带有过滤器扩展名的fancyTree v2.7.0。我已启用自动滚动功能以滚动到活动节点。

我遇到的问题是过滤了树视图。如果单击展开按钮以显示项目的子项,则控制台中将显示以下错误消息。

Error: Fancytree assertion failed: scrollIntoView node is invisible

我创建了一个jsFiddle来重新创建问题http://jsfiddle.net/ajw89/86308as6/8/

这是一个Fancytree错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

我经历过同样的问题。仅当 autoScroll:true 过滤器时出现:{mode:" hide"} 设置已设置。如果您可以在没有这些设置的情况下离开,那么它可以正常工作!

当为节点的最后一个子节点计算自动滚动时,nodeSetExpanded()方法出现问题。如果此子级与筛选条件不匹配,则筛选将隐藏它,因此.is(":visible")断言失败。 我通过在FancytreeNode中引入以下方法在本地解决了这个问题:

getLastVisibleChild: function() {
        var last = null;

        if (this.children) {
            for(var i=0, l=this.children.length; i<l; i++){
                if ($(this.children[i].span).is(":visible")) {
                    last = this.children[i];
                }
            }
        }

        return last;
    }

比我在nodeSetExpanded()中使用此方法替换

// Scroll down to last child, but keep current node visible
node.getVisibleChild().scrollIntoView(true, {topNode: node}).always(function(){

// Scroll down to last child, but keep current node visible
node.getLastVisibleChild().scrollIntoView(true, {topNode: node}).always(function(){

工作正常。