如何刷新Ext.tree.treePanel中节点的内容?

时间:2010-03-10 03:37:59

标签: javascript extjs

我有一个Ext TreePanel,我正在尝试添加一些服务器端分页。我们使用的是Ext 2.2.0。

我们有一个只有两层的自定义树。我们列出树本身下的25个项目(根?),但每个项目节点可以有无限量的子项。我猜这些是“叶子”。与所有孩子一样,项目节点使用自定义uiProvider

我已经为itemNodeUI添加了prev / next页面的一些图像,并添加了处理程序,这些处理程序使用pageNumber更新项目节点的属性。 DataUrl php文件抓取这些属性,基本上将LIMIT附加到sql查询。

一切都按预期工作,除非您单击下一个/上一个图像,否则项目节点会折叠。如果你扩展节点,一切都应该是,但我要么节点要保持扩展,要么在加载后自动重新扩展。我已尝试使用expand()fireEvent('expand')expandChildNodes,整个九码。什么都没有。


这是单击“上一页”按钮时调用的函数:

    onPaginationPrevButtonClick: function(e,t) {
        var parentEl = Ext.get(t).findParentNode('.x-tree-node-ct', 10, false).previousSibling;
        var treeNodeId = parentEl.getAttribute('ext:tree-node-id');
        var treeNode = this.tree.getNodeById(treeNodeId);
        var currentPage = parseInt(treeNode.attributes.pageNumber);

        if (currentPage > 0) {
            treeNode.attributes.pageNumber = currentPage - 1;
        }

        treeNode.getLoader().load(treeNode);
    }



我遇到的另一个问题是,当调用上述函数时,扩展itemNodeUI的{​​{1}}不会被“刷新”。因此,显示正在显示多少结果的文本不会从第一页更改。有没有办法刷新这个节点并让它扩展,而不重新加载整个树?


如果有更好或更简单的方法我应该这样做,我感谢您的任何输入。我是Ext.NEWB,所以我所做的每件事都是'黑客'。 ;)


修改

我几乎不好意思承认这一点,但我完全能够通过使用TreeNodeUI而不是重新加载treeNode.reload()加载器本身来解决崩溃问题。 叹息...

load()

应该是:

treeNode.getLoader().load(treeNode);


但是,我仍然需要弄清楚如何刷新节点本身,以便显示结果的文本和prev / next按钮正确显示。我尝试过使用:

treeNode.reload();

...但所有这一切都是刷新整棵树。我只想更新itemNode本身。有什么想法吗?


非常感谢提前!

1 个答案:

答案 0 :(得分:0)

好吧,我几乎只是为每个HTML元素分配了一个唯一的ID,并使用Ext.get来更新css样式和innerHTML。这是一个非常难看的黑客工作,但它必须这样做。

希望其他人能从中得到一些东西。祝你好运。