0

[Show More] ボタンをクリックしなくても、GWT CellTree の "Show More" 機能をプログラムでトリガーする方法を知っている人はいますか?

私の目的は、ユーザーが 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() 

非常にハッキーなソリューション

1)それを回避する唯一の方法はです。CellTreeNodeViewとCellTreeをコードベースにコピーします(パッケージを維持します)

2)アクセサをパブリックに変更して、要件に応じてshowMoreを呼び出せるようにします。

3)すべての可能なフローをテストするようにしてください。

4)コードベースにコピーされたクラスがgwt-user jarよりもGWTコンパイラへの上位クラスパス階層に表示されるようにし、変更されたクラスが元のクラスではなくピックアップされるようにします。

于 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 に答える