我有一个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本身。有什么想法吗?
非常感谢提前!
答案 0 :(得分:0)
好吧,我几乎只是为每个HTML元素分配了一个唯一的ID,并使用Ext.get来更新css样式和innerHTML。这是一个非常难看的黑客工作,但它必须这样做。
希望其他人能从中得到一些东西。祝你好运。