ExtJs:Tree:如何直接滚动到特定元素?

时间:2010-01-10 10:57:45

标签: javascript tree extjs

我正在寻找一种滚动到树中特定元素的方法。 知道怎么做吗?

5 个答案:

答案 0 :(得分:1)

在节点点击事件处理程序中尝试此操作:

node.getUI().getIconEl().scrollIntoView(node.getOwnerTree(), false);

答案 1 :(得分:1)

我只需要致电n.select();,但我必须在正确的地方执行此操作:)

我制作了一个TreeLoader,并将其链接到我的树上。在其事件load(这意味着'当所有内容被下载'时,我会称之为afterload ...),我读取所有节点并根据他们的id我的行为因此:

var LasTreeLoader = new Ext.tree.TreeLoader({
    dataUrl: 'json/las.php',
    listeners: {
        load: function(loader,n,response) {
        console.log('datas downloaded');
        n.eachChild(
            function(n) {
                if ((n.id=='las/2007') ||
                    (n.id=='las/2007/08') ||
                    (n.id=='las/2007/08/29')) {
                    n.expand(false,false);
                }
                if (n.id=='las/2007/08/29/21_14_04') {
                    n.select();
                }
            });
        }
    }
});

答案 2 :(得分:1)

DOM scrollIntoView并没有真正按预期工作,因为它总是顶部或底部对齐元素。然而,ExtJS似乎正好需要:

Ext.get(el|elId).scrollIntoView(containerId|containerEl);

例如,为了确保Ext.view.View(数据视图)实例中当前选定的项目可见,我做了:

Ext.define('MyView', {
    extend: 'Ext.view.View',
    ...

    listeners: {
        'selectionchange': function(_, selections) {
            if (selections.length === 1) {
                var node = this.getNode(selections[0]);
                Ext.fly(node).scrollIntoView(this.el);
            }
        }
    },
    ...
}

答案 3 :(得分:0)

它与extJs没有直接关系,但您可以在树中获取所需的DOM元素,并使用scrollTo来获取它。

答案 4 :(得分:0)

var path = tree.getSelectionModel().getSelectedNode().getPath('id');  
    //reload data,  
    tree.getLoader().load(tree.getRootNode(),function(treeNode){  
    //expand path and select node
    tree.expandPath(path,'id',function(bSucess,oLastNode){  
        tree.getSelectionModel().select(oLastNode);  
    });  
},this);