CellTree Показать больше программно

Кто-нибудь знает, как программно активировать функцию «Показать больше» GWT CellTree, не нажимая кнопку «Показать больше»?

Моя цель - реализовать своего рода пейджер, который увеличивает количество отображаемых элементов, когда пользователь прокручивает ScollPanel, поэтому это будет что-то вроде:

//inside pager class

onScroll(ScrollEvent)
{

    //here I would call CellTree's show more

}

Я искал код классов CellTree и CellTreeNodeView, но не нашел четкого способа сделать это.

Я знаю, что в классе CellTreeNodeView есть функция showMore, которая выполняет это действие, но я не знаю, как вызвать ее из другого класса. Мне нужен объект CellTreeNodeView, и я не знаю, как его получить.

Спасибо!


person Sergi    schedule 01.02.2013    source источник
comment
Вы можете проверить это: stackoverflow.com/questions/3129104/   -  person Ümit    schedule 03.02.2013


Ответы (2)


Это защищенный пакетом метод в защищенном пакетом классе CellTreeNodeView, т.е. только код в com.google.gwt.user.cellview.client может вызывать его.

  void showMore() 

Крайне хакерское решение

1) Единственный способ обойти это. Скопируйте CellTreeNodeView и CellTree в базу кода (сохраните пакет)

2) Измените accessors на общедоступные, чтобы вы могли вызывать showMore в соответствии с вашими требованиями.

3) Убедитесь, что вы тестируете все возможные потоки.

4) Убедитесь, что скопированные классы в вашей кодовой базе отображаются в более высокой иерархии путей к классам для компилятора GWT, чем gwt-user jar, что гарантирует, что ваши измененные классы будут выбраны, а не исходные.

person appbootup    schedule 04.02.2013

Наконец я заставил его работать именно так, как я хотел, и без необходимости копировать код из защищенного оригинального 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

person Sergi    schedule 04.02.2013