我有一个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本身.有什么想法吗?
提前谢谢了!
好吧,我几乎只是为每个 HTML 元素分配了一个唯一的 ID,并使用 Ext.get 来更新 css 样式和innerHTML。这是一个相当丑陋的黑客工作,但它必须做。
希望其他人能从中得到一些东西。祝你好运。
| 归档时间: |
|
| 查看次数: |
9789 次 |
| 最近记录: |