CellTree以编程方式“显示更多”

时间:2013-02-01 11:20:15

标签: gwt pager

有没有人知道如何以编程方式触发GWT CellTree的“显示更多”功能,而无需点击“显示更多”按钮?

我的目标是实现一种寻呼机,增加用户向下滚动ScollPanel时显示的元素数量,所以它会是这样的:

//inside pager class

onScroll(ScrollEvent)
{

    //here I would call CellTree's show more

}

我一直在寻找CellTree和CellTreeNodeView类代码,但我找不到明确的方法来做到这一点。

我知道CellTreeNodeView类有一个执行此操作的showMore函数,但我不知道如何从另一个类调用它。我需要一个CellTreeNodeView对象,并且不知道如何获取它。

谢谢!

2 个答案:

答案 0 :(得分:0)

它是受包保护的类CellTreeNodeView中的受包保护的方法,即com.google.gwt.user.cellview.client中的代码只能调用它。

  void showMore() 

非常hacky解决方案

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