23

GWT を UiBuilder と組み合わせて使用​​することを検討し始めました。GWT のドキュメント@UiHandler(..)に書かれているように、ディレクティブを使用して単純なイベント ハンドル コードを作成する方法について、私は少し困惑しています。

@UiHandler("button")
void handleClick(ClickEvent e) {
  Window.alert("Hello, AJAX");
}

この場合、メソッドhandleClickが使用されます。各 GWT ウィジェットについて、どのメソッドを使用して作成できるかをどのように知ることができます@UiHandlerか? メソッドを作成することもできますdoClose()

しかし、たとえば、ListBoxアイテムが選択されたイベントを取得するために で何を使用できますか? ドキュメントのどこでこれを見ることができますか?

4

2 に答える 2

33

注釈に渡すパラメータ@UiHandlerは、割り当てる適切なフィールドの名前です*Handler。したがって、この場合はaClickHandlerをに割り当てますButton button(実際には、フィールドの名前を知っているだけです)。

これが正確にどのように機能するかについては、GWTマジックの一部です:)他のUiBinder関連コードと同じように(UiBinderが生成するコードを示すプレゼンテーションがGoogle IOにあったと思います)、コンパイル時にコンパイラは何がどこに行くのかを理解します。この例では、があり、パラメータ->をButton button持つ@UiHandler注釈付きのメソッドがあります。これは、それがaであることを意味する必要があります(メソッドの名前は重要ではないことに注意してください)。それでは、コンパイル時に(おそらくコンストラクターで)そのハンドラーをボタンに追加するコードを追加しましょう。より包括的な答えに興味がある場合は、ソースをチェックしてください:DClickEventClickHandler

しかし、たとえば、ListBoxアイテムが選択されたイベントを取得するために、何を使用できますか?ドキュメントのどこでこれを見ることができますか?

GWTAPIリファレンス内。この場合、おそらくListBox.addChangeHandlerを探しています。ただし、通常、@UiHandler関連するコードは見つかりません。これは冗長になるためです。常に@UiHandler同じ方法でメソッドを作成します。

  1. *Handler追加したいことをチェックしますChangeHandler
  2. void onChange(ChangeEvent event)-なので、メソッドにはパラメータが必要で、次ChangeEventのようになります。

    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    
于 2010-08-09T14:36:25.153 に答える
1

おそらくあなたの問題は onModuleLoad メソッドにあります:

public void onModuleLoad() 
{       
    HelloWorld helloWorld = new HelloWorld("BOTAO"); 

    // Using this way @UiHandler will not work
    //Document.get().getBody().appendChild(helloWorld.getElement()); 

    // correct way
    RootPanel.get().add(helloWorld);  
}
于 2012-12-21T13:51:26.257 に答える