0

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

我的目标是实现一种寻呼机,当用户向下滚动 ScollPanel 时,它会增加显示的元素数量,因此它类似于:

//inside pager class

onScroll(ScrollEvent)
{

    //here I would call CellTree's show more

}

我一直在查看 CellTree 和 CellTreeNodeView 类的代码,但找不到明确的方法。

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

谢谢!

4

3 回答 3

0

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

  void showMore() 

非常hacky的解决方案

1)解决它的唯一方法是。将 CellTreeNodeView 和 CellTree 复制到您的代码库中(维护包)

2) 将访问器更改为 public 以允许您根据需要调用 showMore。

3) 确保您测试所有可能的流程。

4) 确保代码库中复制的类出现在 GWT Compiler 比 gwt-user jar 更高的类路径层次结构中,从而确保拾取修改后的类而不是原始类。

于 2013-02-04T09:04:49.300 回答
0

最后,我让它完全按照我的意愿工作,而无需从受保护的原始 GWT 中复制代码。

重点是触发与“显示更多”按钮相同的事件,所以我创建了一个假的 onMouseDown 事件,并以显示更多按钮作为目标来触发它:

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

于 2013-02-04T12:48:27.863 回答
0

我的解决方法是这个:

public static void makeShowMoreVisible(Element element, boolean isVisible) {
    ArrayList<Element> result = new ArrayList<Element>();
    findShowMore(result, element);  

    for (Element elt : result) {
        if (isVisible) {
            element.getStyle().clearDisplay();
        } else {  
            element.getStyle().setDisplay(Display.NONE); 
        }
    }
}

private static void findShowMore(ArrayList res, Element element) {
    String c;

    if (element == null) {
        return;
    }

    if (element.getInnerText().equals("Show more")) {
        res.add(element);
    }

    for (int i = 0; i < DOM.getChildCount(element); i++) {
        Element child = DOM.getChild(element, i);
        findShowMore(res, child);   
    }
}
于 2022-01-06T15:27:48.753 回答