2

这是我的代码 -

 var myTree = {
     containerScroll: "true",
     width: 500,
     root: new Ext.tree.AsyncTreeNode({
         id: "source",
         text: "Root",
         expanded: true,
         draggable: true,
         expandable: true
     }),
     loader: new Ext.tree.TreeLoader({
         dataUrl: 'page.php?action=Get_Tree',
         preloadChildren: true,
         expandAll: function () {}
     }),
     xtype: "treepanel",
     loadMask: {
         msg: 'Loading...'
     },
     maskDisabled: false,
     id: "tree",
     listeners: {
         click: function (node, event) {
             // Render entity data in right panel
             handleAction(node);
         }
     }
 }

当用户单击树的任何节点时,我从数据库中获取数据并使用handleAction方法渲染另一个面板。就我而言,我需要在另一个面板中显示节点的信息并更新它。在更新处理程序上,我需要将节点的文本/ID 更改为现在更新。

这工作正常,但我需要刷新树,以便我可以查看更新的节点。但是,它对我不起作用:(。

这是我更新节点的代码 -

var tree = Ext.getCmp('tree');
var id = req.responseText.split('#')[1];
var myId = 'Spec#' + entityId;
var node = tree.getNodeById(myId);
node.id = 'Spec#' + id;
node.text = updated_spec_id;
tree.enable();
tree.getLoader().dataUrl = 'page.php?todo=Get_Tree';
tree.getLoader().load(tree.root);
// This I have tried but not succeed. 
tree.getView().refresh();
tree.expandAll();
node.expand();
tree.getRootNode().expand(true);

但是,当我使用鼠标单击手动展开它时,节点会更新。

请帮忙。提前致谢。

4

1 回答 1

0

你试过doLayout函数吗?文档摘录:

如果调用 add 时容器已经渲染,您可能需要调用 doLayout 来刷新视图,这会导致渲染任何未渲染的子组件。这是必需的,以便您可以在需要时添加多个子组件,同时只刷新一次布局。

在我看来,你的树表现正常。因为,您已经使用了click事件,因此当您单击节点时会触发此事件。

于 2013-12-27T19:24:53.903 回答