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

Don*_*ulo 6 javascript extjs

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

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

我已经为prev/next页面添加了一些图像,itemNodeUI并添加了处理程序,这些处理程序使用pageNumber更新项目节点的属性.在DataUrlPHP文件抓住这些属性和基本附加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);
    }
Run Code Online (Sandbox Code Playgroud)



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


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


编辑:

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

treeNode.getLoader().load(treeNode);
Run Code Online (Sandbox Code Playgroud)

本来应该:

treeNode.reload();
Run Code Online (Sandbox Code Playgroud)


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

treeNode.parentNode.reload();
Run Code Online (Sandbox Code Playgroud)

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


提前谢谢了!

Don*_*ulo 0

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

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