【问题标题】:how to reload a selected node of a tree如何重新加载树的选定节点
【发布时间】:2012-12-21 14:08:48
【问题描述】:

删除节点的一​​个叶子后,我需要重新加载树。重新加载整个商店的问题是,它太慢了。这就是为什么我只想重新加载一个删除其叶子的节点。

我试过这个..但它说空...

Ext.getCmp('myTree').root.reload();

我也试过

var tempParent = Ext.getCmp('myTree').getSelectionModel().getSelection()[0].parentNode;
Ext.StoreMgr.lookup('myStore').load( {node: tempParent});

这也无济于事... 有没有人解决过类似的问题?

更新

var node = Ext.getCmp('myTree').getSelectionModel().getSelection()[0].parentNode.get('id');

这确实给了我父节点... 但是当我加载它时

Ext.getCmp('myTree').store.load({ node: node });

我收到此错误

TypeError: b.getId 不是函数

第二次更新--

这就是我的树的样子

  • 第一个节点

    • 第一片叶子
  • 第二个节点

    • 第一片叶子

现在当我删除第二个节点的第一个叶子时...第一个节点出现在第二个节点下

  • 第一个节点

    • 第一片叶子
  • 第二个节点

    • 第一个节点

【问题讨论】:

  • 树是否绑定到商店?您能否提供更多关于为什么需要重新加载父节点的信息? ExtJs 通常会正确处理此问题,而无需您执行任何操作。
  • 谢谢Izhaki...我的树上有一个删除叶子功能...并且可以有多个相同的叶子(假设可以有2个'leaf1')...所以当我删除在“leaf1”上,只有选定的“leaf1”被删除。第二个“leaf1”仍在树上……但是当我手动刷新浏览器时,它就消失了
  • 你不能只听节点删除吗?查找相关节点;并删除它们?
  • 这正是我想要做的......找到相关节点......我似乎无法理解它......你能告诉我一些样本
  • 我在下面更新了我的答案。

标签: tree extjs4 reload treenode


【解决方案1】:

这里是如何刷新树的特定节点。在您的情况下,您可能希望刷新需要显示更改的父节点:

   refreshRow:function(id){
        var node = this.store.getNodeById(id);
        if (node){
            this.store.load({node:node});
        }
     }

更新

根据您提供的信息,我的结论是您正在尝试在树中的多个位置使用特定服务器生成的 ID 填充同一节点。树商店不支持这一点。即使其余节点信息相同,每个节点也必须具有唯一的 ID。

【讨论】:

  • 谢谢 dbrin... 这是 beforedrop 配置中的 refreshRow 吗?因为我在 ajax 失败 fn 后尝试这样做,它说 getNodeyByid 不是函数
  • 可能是因为 ajax 回调在 windows 范围内。更改代码以获取对树面板存储的引用。
  • Yes Dbrin .. 我使用了 Ext.getCmp.getSelectionModel().getSelection()[0].getNodeById(id) 并且我仍然得到同样的错误......但是做 parentNode.get(' id') 有效。它给了我节点,但它说 TypeError: b.getId is not a function on load
  • getNodeById 是 store 上的一个函数 :: store.getNodeById(id);
  • 嗯... :)... 现在它刷新了节点,然后在删除完成的那个节点上加载树的第一个节点...我也收到此错误 TypeError: a[b] 未定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多