有没有人知道如何以编程方式触发GWT CellTree的“显示更多”功能,而无需点击“显示更多”按钮?
我的目标是实现一种寻呼机,增加用户向下滚动ScollPanel时显示的元素数量,所以它会是这样的:
//inside pager class
onScroll(ScrollEvent)
{
//here I would call CellTree's show more
}
我一直在寻找CellTree和CellTreeNodeView类代码,但我找不到明确的方法来做到这一点。
我知道CellTreeNodeView类有一个执行此操作的showMore函数,但我不知道如何从另一个类调用它。我需要一个CellTreeNodeView对象,并且不知道如何获取它。
谢谢!
答案 0 :(得分:0)
它是受包保护的类CellTreeNodeView中的受包保护的方法,即com.google.gwt.user.cellview.client中的代码只能调用它。
void showMore()
1)唯一的方法是。将CellTreeNodeView和CellTree复制到您的代码库中(维护包)
2)将访问者更改为public,以允许您根据需要调用showMore。
3)确保测试所有可能的流量。
4)确保代码库中复制的类出现在比gwt-user jar高的类路径hieararchy中,从而确保修改后的类被拾取而不是原始类。
答案 1 :(得分:0)
最后,我完全按照自己的意愿使用它,而无需从受保护的原始GWT复制代码。
关键是触发与“显示更多”按钮相同的事件,因此我创建了一个假的onMouseDown事件,并以show more按钮作为目标触发它:
final ScrollPanel sp = new ScrollPanel();
sp.addScrollHandler(new ScrollHandler() {
@Override
public void onScroll(ScrollEvent event)
{
int maxScrollBottom = sp.getWidget().getOffsetHeight()
- sp.getOffsetHeight();
if (sp.getVerticalScrollPosition() >= maxScrollBottom) {
NativeEvent clickEvent = Document.get().createMouseDownEvent(0,0,0,0,0,false,false,false,false,0);
Element target = (Element) cellTree.getCellTree().getElement().getLastChild().getFirstChild().getLastChild();
target.dispatchEvent(clickEvent);
}
}
});
非常感谢你,反正! :d