5

アプリのEventBusを、コンストラクターを介してUiBinderで宣言されたウィジェットに渡そうとしています。@UiConstructorアノテーションを使用して、EventBusを受け入れるコンストラクターをマークしていますが、ui.xmlコードからオブジェクトを実際に参照する方法がわかりません。

つまり、私は次のようなものが必要です

WidgetThatNeedsAnEventBus.java

public class WidgetThatNeedsAnEventBus extends Composite
{
    private EventBus eventBus;

    @UiConstructor
    public WidgetThatNeedsAnEventBus(EventBus eventBus)
    {
        this.eventBus = eventBus;
    }
}

TheUiBinderThatWillDeclareAWTNAEB.ui.xml

<g:HTMLPanel>
    <c:WidgetThatNeedsAnEventBus eventBus=_I_need_some_way_to_specify_my_apps_event_bus_ />
</g:HTMLPanel>

静的な値をWidgetThatNeedsAnEventBusに渡すのに問題はなく、ファクトリメソッドを使用して新しいEventBusオブジェクトを作成できます。しかし、私が必要としているのは、アプリの既存のEventBusを渡すことです。

UiBinderにすでに存在するオブジェクトを参照する方法はありますか?

4

2 に答える 2

8

私の最終的な解決策は@UiField(provided=true)、変数で初期化するために必要なウィジェットで使用することでした。

initWidget次に、親を呼び出す前に、Javaでウィジェットを自分で作成しました。

例えば:

public class ParentWidget extends Composite
{
    @UiField(provided=true)
    protected ChildWidget child;

    public ParentWidget(Object theObjectIWantToPass)
    {
        child = new ChildWidget(theObjectIWantToPass);  //_before_ initWidget
        initWidget(uiBinder.create(this));

        //proceed with normal initialization!
    }
}
于 2010-10-26T23:29:10.903 に答える
2

ファクトリ メソッドを使用することをお勧めします (ここで説明します)。このようにして、インスタンスをウィジェットに渡すことができます。

要素を使用すると、<ui:with>オブジェクトをウィジェットに渡すこともできます (setter メソッドが存在する場合) (ここに記載されているように)。しかし、オブジェクトはインスタンス化さGWT.createれますが、それはあなたがeventBus.

于 2010-10-15T22:29:53.417 に答える