ExtJs: Tree: как прокрутить напрямую до определенного элемента? - PullRequest
1 голос
/ 10 января 2010

Я ищу способ прокрутки до определенного элемента в дереве. Есть идеи как это сделать?

Ответы [ 5 ]

1 голос
/ 30 сентября 2011

DOM scrollIntoView на самом деле не работает должным образом, так как он всегда либо сверху, либо снизу выравнивает элемент. ExtJS, однако, кажется, что именно то, что нужно:

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

Например, чтобы убедиться, что текущий выбранный элемент в экземпляре Ext.view.View (dataview) виден, я сделал:

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);
            }
        }
    },
    ...
}
1 голос
/ 11 января 2010

Попробуйте это в обработчике событий щелчка вашего узла:

node.getUI().getIconEl().scrollIntoView(node.getOwnerTree(), false);
1 голос
/ 16 января 2010

Мне просто нужно было позвонить 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();
                }
            });
        }
    }
});
0 голосов
/ 29 июля 2010
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); 
0 голосов
/ 10 января 2010

Он не имеет прямого отношения к extJ, но вы можете получить нужный элемент DOM в своем дереве и использовать scrollTo, чтобы добраться до него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...