1

UiBinder用于以声明的方式布置 GWT 组件,使用 XML 标记,而不是以编程方式使用 Java 代码。

UiBinder 树中的新 XML 元素意味着应该创建该类的新实例。因此,GWT 文档中的这个示例实例化了一个新的 Horizo​​ntalPanel 和两个标签:

<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 回答