【问题标题】:Write a component with special UiBinder markup?用特殊的 UiBinder 标记编写组件?
【发布时间】:2013-01-25 19:35:53
【问题描述】:

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 标记?

【问题讨论】:

    标签: gwt uibinder


    【解决方案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 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2012-10-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多