关于uibinder:复制GWT的TabLayoutPanel的<g:tab>元素

Duplicating the <g:tab> element of GWT's TabLayoutPanel

我发现 GWT 选项卡面板对于我需要做的样式来说很笨重,所以我正在尝试制作自己的简单选项卡面板。基本上是一个 HTML5 <nav> 元素用于选项卡和一个 DeckPanel 来显示内容。让用户用 CSS3 解决剩下的问题。

GWT TabLayoutPanel 具有这些用于定义选项卡内容的"特殊"标签:

1
2
3
4
5
6
<g:TabLayoutPanel>
    <g:tab>
        <g:header>Tab Title</g:header>
        <g:OtherWidget>Tab contents</g:OtherWidget>
    </g:tab>
</g:TabLayoutPanel>

我指的是 <g:tab><g:header>。我看到这些类型的标签在不同的地方使用,但我不知道如何创建它们。查看 TabLayoutPanel 源代码,我看到它有一个 add 方法,该方法需要两个小部件,然后它将一个小部件(内容)放入面板中进行显示,将另一个(标题)放入 TabLayoutPanel.Tab 的实例中.但我不知道如何复制这种功能。


在 GWT 2.1 中有 UiChild 属性。这很酷。

1
@UiChild public void addTabDef(Widget page, String title) {...}

title 参数将在 tabdef 标记中填充同名属性,如下所示:

1
<v:tabdef title="Tab one"><g:Label>Page one.</g:Label></v:tabdef>

编辑:需要明确的是,tabdef 没有在任何地方定义为类;解析期间所需的行为由 UiChild 属性定义。


要为您的小部件使用自定义标签,例如 <g:tab><g:header>,您需要创建自定义 ElementParse 并将其注册到 UiBinderWriter。不幸的是,在不编辑 gwt.

的源代码的情况下,还没有简单的方法可以做到这一点

有用的链接:

无法创建自定义ElementParser问题的链接

TabLayoutPanelParser