Дерево асинхронно загружает каждый узел, и вам нужно вызвать фокус только после загрузки всех узлов. То, что вы собираетесь нужно сделать, это установить автозагрузку к ложным на корневой узел, а потом в коде вручную загрузить корневой узел в первый раз с помощью:
rootNode.expand(true, function(){
myTreePanel.getView().focusRow(nodeyouwanttofocus);
});
делать это таким образом позволяет использовать первый параметр функции расширения, который делает расширение полностью рекурсивным, а также гарантирует, что второй параметр, который является функцией, выполняется только после загрузки всех узлов, гарантируя, что представление является правильной высотой и что узел существует визуально.
Другой вариант, который позволяет более flexability является вклиниться в расширяемой событие:
var myTreeStore = Ext.create("Ext.data.TreeStore", {
listeners: {
expand: function(theParentNode){
theParentNode.eachChild(function(node){
if(nodeIWantSelected == node)
myTreePanel.getView().focusRow(node);
}
}
}
});
и вы можете использовать .select модели выбора зацепить, чтобы выбрать узел (и я думаю, что он может сосредоточиться узел тоже).
Я не пробовал «selectPath», как предложил Sha before, что кажется намного проще в использовании, но вы можете подключить функцию focusRow в качестве обратного вызова, и я думаю, что это тоже сработает.
Какая версия ExtJs вы используете? – sha
Я использую extjs 4.1 – Charles