У меня есть простой TreePanel. Я хотел бы выбрать конкретный узел после загрузки его. Узлы из удаленного файла (json).
Дерево загружается как ожидалось. Однако узел не выбирается. Firebug показывает узел как неопределенный. Это, возможно, из-за асинхронного свойства. Но, я неспособное, чтобы настроить это другое мудрое, или указать узел быть выбранным.
Любые предложения, одобренные, и спасибо.
LeftMenuTree = new Ext.tree.TreePanel({
renderTo: 'TreeMenu',
collapsible: false,
height: 450,
border: false,
userArrows: true,
animate: true,
autoScroll: true,
id: 'testtest',
dataUrl: fileName,
root: {
nodeType: 'async',
iconCls:'home-icon',
expanded:true,
text: rootText
},
listeners: {
"click": {
fn: onPoseClick,
scope: this
}
},
"afterrender": {
fn: setNode,
scope: this
}
});
function setNode(){
alert (SelectedNode);
if (SelectedNode == "Orders"){
var treepanel = Ext.getCmp('testtest');
var node = treepanel.getNodeById("PendingItems");
node.select();
}
}
Это потому, что узел не может быть выбран до тех пор, пока дерево не будет визуализировано. Попробуйте добавить выбранный узел в прослушиватель событий, ожидающий события рендеринга.
Я использую этот код в TreeGrid для выбора узла
_I.treeGrid.getSelectionModel().select(_I.treeGrid.getRootNode());
Я не пробовал это в TreePanel, но поскольку TreeGrid основан на нем, я просто предполагаю, что это работает. Я использовал событие загрузки загрузчика, чтобы добавить аналогичный код после выполнения запроса XHR, поэтому попробуйте написать свою функцию setNode следующим образом:
var loader = LeftMenuTree.getLoader();
loader.on("load", setNode);
function setNode(){
alert (SelectedNode);
if (SelectedNode == "Orders"){
var treepanel = Ext.getCmp('testtest');
treepanel.getSelectionModel().select(treepanel.getNodeById("PendingItems"));
}
}