1

UiBinderは、Javaコードを使用したプログラムではなく、XMLマークアップを使用して、宣言的な方法でGWTコンポーネントをレイアウトするために使用されます。

UiBinderツリーの新しいXML要素は、そのクラスの新しいインスタンスを作成する必要があることを意味します。したがって、GWTドキュメントのこの例では、新しいHorizo​​ntalPanelと2つのラベルがインスタンス化されます。

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:g='urn:import:com.google.gwt.user.client.ui'>
  <g:HorizontalPanel>
    <g:Label>Keep your ducks</g:Label>
    <g:Label>in a row</g:Label>
  </g:HorizontalPanel>
</ui:UiBinder>

DockLayoutPanelを使用したこの他の例もあります。

<g:DockLayoutPanel unit='EM'>
  <g:north size='5'>
    <g:Label>Top</g:Label>
  </g:north>
  <g:center>
    <g:Label>Body</g:Label>
  </g:center>
  <g:west size='10'>
    <g:HTML>
      <ul>
        <li>Sidebar</li>
        <li>Sidebar</li>
        <li>Sidebar</li>
      </ul>
    </g:HTML>
  </g:west>
</g:DockLayoutPanel>

この場合、要素は「north」、「west」、「center」ですが、これらはクラスの新しいインスタンスではなく、新しいDockLayoutPanelの構成です。

  1. DockLayoutPanelのように、カスタムUiBinder XML要素を受け入れるコンポーネントを作成するにはどうすればよいですか?
  2. クラスDockLayoutPanelのソース、またはその構成ファイルのどこで、特別なマークアップを使用するようにマークされていますか?また、特別なマークアップ要素の内部コンテンツをどのように処理しますか?
  3. 他のどのウィジェットが特別なUiBinderマークアップを受け入れますか?
4

1 に答える 1

1
  1. カスタムウィジェットにカスタムUiBinderパーサーを導入する必要があるようです。

  2. com.google.gwt.uibinder.elementparsers.DockLayoutPanelParser次の静的最終マップが定義されているクラスがあります。

    private static final Map<String, String> DOCK_NAMES = new HashMap<String, String>();
    static {
       DOCK_NAMES.put("north", "addNorth");
       DOCK_NAMES.put("south", "addSouth");
       DOCK_NAMES.put("east", "addEast");
       DOCK_NAMES.put("west", "addWest");
       DOCK_NAMES.put("lineStart", "addLineStart");
       DOCK_NAMES.put("lineEnd", "addLineEnd");
       DOCK_NAMES.put("center", "add");
    }
    
  3. それらすべてを検索したわけではありませんが、DockLayoutPanelのようなカスタムパーサーを持つウィジェットは、処理するようにプログラムした内部XML要素を処理できると推測しています。

于 2013-01-25T19:58:07.133 に答える