Je cherche un moyen de faire défiler vers un élément spécifique dans un arbre. Une idée de comment faire cela?ExtJs: Tree: comment faire défiler directement vers un élément spécifique?
Répondre
Je devais appeler n.select();
mais je devais le faire au bon endroit :)
J'ai fait un TreeLoader et reliaient à mon arbre. Dans son cas load
(qui signifie « quand tout est téléchargé », je l'ai appelé afterload
...), je lis tous les nœuds et en fonction de leur id
j'agir 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();
}
});
}
}
});
Il n'est pas directement lié à extJs, mais vous pouvez obtenir l'élément DOM souhaité dans votre arborescence et utiliser scrollTo
pour y accéder.
Essayez dans votre gestionnaire d'événements, cliquez noeud:
node.getUI().getIconEl().scrollIntoView(node.getOwnerTree(), false);
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);
Le Le DOM scrollIntoView
ne fonctionne pas vraiment comme prévu, car le haut ou le bas aligne toujours l'élément. ExtJS semble cependant avoir juste ce qu'il faut:
Ext.get(el|elId).scrollIntoView(containerId|containerEl);
Par exemple, pour assurer l'élément sélectionné dans un Ext.view.View
(dataview) instance est visible, je l'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);
}
}
},
...
}
Salut! Je ne l'ai pas essayé, mais ça peut marcher. Voir ma réponse pour voir ce que j'ai fait :) –
Je l'ai essayé, ça marche. Merci beaucoup! :-) – Windwalker