ExtJs: Arbre: comment défiler directement vers un élément spécifique?

Je recherche un moyen de faire défiler jusqu'à un élément spécifique dans un arbre. Une idée de comment faire?

Essayez ceci dans votre gestionnaire d'événement de clic noueux:

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

Je devais appeler n.select(); Mais je devais le faire au bon endroit 🙂

J'ai créé TreeLoader et l'ai lié à mon arbre. Dans sa load événement (ce qui signifie «quand tout est téléchargé», j'aurais appellé après la mise sous afterload …), j'ai lu tous les noeuds et selon leur id j'agis en conséquence:

 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(); } }); } } }); 

Le DOM scrollIntoView ne fonctionne pas vraiment comme prévu car il est toujours supérieur ou inférieur qui aligne l'élément. ExtJS semble avoir exactement ce qu'il faut:

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

Par exemple, pour s'assurer que l'élément actuellement sélectionné dans une Ext.view.View (dataview) est visible, j'ai fait:

 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); } } }, ... } 

Il n'est pas directement lié aux extJs, mais vous pouvez obtenir l'élément DOM que vous voulez dans votre arbre et utiliser scrollTo pour y accéder.

 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);