5

ウィジェットを作成しました:

public class myWidget<T> extends FlowPanel {
private T value;

public T getValue()
{
    return value;
}

public myWidget(T[] values) {
    for (T value : values)
    {
        //do action
    }
}

UiBinderを使用して追加するにはどうすればよいですか?それは可能ですか?

4

3 に答える 3

7

はい、できます。myWidgetクラスを含むパッケージをXML名前空間にインポートする必要があります。パッケージがと呼ばれるとするとcom.test.widgets、宣言型レイアウトは次のようになります。

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'
    xmlns:my='urn:import:com.test.widgets'>

  <my:myWidget>
    <g:Label>A label</g:Label>
    <g:Label>A second label</g:Label>
  </my:myWidget>
</ui:UiBinder>

インポートxmlns:my='urn:import:com.test.widgets'と使用法に注意してください<my:myWidget>

于 2012-08-10T06:41:08.947 に答える
4

ウィジェットをUibinderで使用できるようにするには、少なくともIsWidgetインターフェースを実装する必要があります。すでにウィジェットであるため、もちろんすでにIsWidgetを実装しています。

したがって、非ウィジェットは、IsWidgetを実装することにより、uibinderの子ウィジェット要素として使用することもできます。

IsWidgetインターフェースでは、メソッドを実装するために非ウィジェットが必要asWidget()です。したがって、このような非ウィジェットはウィジェットコンテナとして機能する必要があります。

IsWidgetを実装すると、クラスを子ウィジェット要素としてのみ使用できます。

あなたのクラスが

com.zzz.client.ui.HelloKitty

子ウィジェット要素を持つことができるようにするには、を実装する必要がありますHasWidgets

<ui:UiBinder
  xmlns:ui='urn:ui:com.google.gwt.uibinder'
  xmlns:g='urn:import:com.google.gwt.user.client.ui'
  xmlns:z='urn:import:com.zzz.client.ui'>

  <g:VerticalPanel>
    <z:HelloKitty>
      <g:button ..../>
      <g:textbox>asdf</g:textbox>
    </z:HelloKitty>
  <g:VerticalPanel>

</ui:UiBinder>

または、HasOneWidgetを実装することもできます。

クラスがそのuibinderタグの間にテキストを持つことができるようにするには、HasTextを実装する必要があります。

<ui:UiBinder
  xmlns:ui='urn:ui:com.google.gwt.uibinder'
  xmlns:g='urn:import:com.google.gwt.user.client.ui'
  xmlns:z='urn:import:com.zzz.client.ui'>

  <g:VerticalPanel>
    <z:HelloKitty>qwerty</z:HelloKitty>
  <g:VerticalPanel>

</ui:UiBinder>

タグ間で有効なHTMLを受け入れるには、HasHTMLを実装する必要があると思います。

于 2012-08-10T07:26:01.677 に答える
0

答えのどれも一般的な部分に焦点を当てているようには見えません。他の人が述べたように、ジェネリックタイプを省略することで、UiBinderテンプレートにジェネリックウィジェットを簡単に追加できます。

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:g='urn:import:com.google.gwt.user.client.ui'
             xmlns:my='urn:import:com.test.widgets'>
    <my:myWidget />
</ui:UiBinder>

しかし、Javaコードでこのウィジェットを参照したい場合はどうでしょうか。そこでもジェネリック型を省略して、コンパイラの警告の怒りを招く必要がありますか?

ありがたいことに、いいえ。UiBinderは型に関してはかなり緩く、ジェネリック型は単なるヒントであるため、上記のUiBinderテンプレートをサポートするJavaコードで次のことを回避できます。

@UiField(provided = true)
myWidget<Date> myWidget = new myWidget(new Date(), new Date());

または、ドキュメントに@UiFactory記載されている方法を使用することもできます。

于 2014-10-22T23:46:34.770 に答える