Extjs 4 treepanel 重新加载和展开
Posted
技术标签:
【中文标题】Extjs 4 treepanel 重新加载和展开【英文标题】:Extjs 4 treepanel Reload and Expand 【发布时间】:2012-02-16 09:57:34 【问题描述】:我正在使用带有 Json 数据的 Extjs4 树形面板。我想重新加载树形面板并需要将树形菜单展开到指定节点。 我正在使用以下代码。请告诉我如何做到这一点。
//Define tree store
var store = Ext.create('Ext.data.TreeStore',
proxy:
type: 'ajax',
url: 'my_tree.php',
,
noCache: false
);
// Treepanel
var treePanel = Ext.create('Ext.tree.Panel',
id: 'mytree',
renderTo: 'tree_div',
height: 400,
bodyBorder: false,
border: false,
singleExpand: true,
rootVisible: false,
store: store,
useArrows: true
);
//Reload tree
function reload_tree()
var tree_panel = Ext.getCmp('mytree');
tree_panel.enable();
tree_panel.getLoader().dataUrl = 'my_tree.php';
tree_panel.getLoader().load(tree_panel.root);
//Expand tree node
tree_panel.getLoader().on('load', function(loader, node)
tree_panel.getNodeById(nodeid).expand();
//here node id is tree menu nodeid
);
提前致谢
【问题讨论】:
【参考方案1】:重新加载树,我认为调用起来更简单
treePanel.getStore().load();
然后你可以监听加载事件,这样数据就被全部提取出来,最后从那里选择所需的节点。
treePanel.on("load", function( treeStore, records, successful, operation))
var id = 4; // This is the ID of the node that somehow you know in advance
var node = treeStore.getNodeById(id);
treePanel.expandPath(node.getPath());
);
HTH!
【讨论】:
感谢您的快速重播。树形面板加载正常但未扩展,在 firebug 中显示错误“node.getPath not a function”。 哦,我的错,抱歉 getPath() 在 ExtJS 4 中消失了,尽管您有其他方法来扩展所需的节点,请在这篇文章中查看 Molecule Man 的答案***.com/questions/6709106/…跨度> 嗯.. 谢谢字节奴隶非常感谢。它工作正常。节点扩展完全符合我的预期,但未选择(样式影响)。一般来说,如果任何被选中的treemunu节点都有一些不同的选中样式。你能帮帮我吗? 以前在 Exts2.0 中我使用的是 tree_panel.getNodeById(nodeid).ensureVisible(); tree_panel.getNodeById(nodeid).select();展开后选择节点。 如果找到要选择的记录的索引,可以使用 var selNodeIndex = 0; var record = tree_panel.getRootNode().getChildAt(selNodeIndex); tree.getSelectionModel().select(record);如果你不能那么,通过商店,尝试通过 id pr 获取记录,然后将记录传递给 tree.getSelectionModel().select(record);以上是关于Extjs 4 treepanel 重新加载和展开的主要内容,如果未能解决你的问题,请参考以下文章