是否可以重用 GWT UIBinder 面板?

Is it possible to reuse GWT UIBinder panels?

我在 Google Web Toolkit 中有一个使用 UIBinder 涉及 TabLayoutPanel 的布局。此布局包含我的应用程序将使用的所有选项卡的超集(将其视为管理视图)。

我现在需要创建一个新布局,使用这些选项卡的一个子集(例如,对于普通用户)。

是否可以在我的用户布局中从我的管理布局中导入面板?或者也许将它们全部定义在第三个文件中,然后从两个布局中导入?


您绝对可以将您编写的视图(包括 UIBinder 模板和常规 Widget)导入另一个 UIBinder 模板。

来自 UIBinder 文档:

1
2
3
4
5
6
7
8
9
10
11
<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.my.app.widgets' >

  <g:HTMLPanel>
    <my:WeatherReport ui:field='weather'/>

    <my:Stocks ui:field='stocks'/>
    <my:CricketScores ui:field='scores' />
  </g:HTMLPanel>
</ui:UiBinder>

注意 StocksCricketScores 小部件是如何从您自己的包中导入的。

您不一定需要这样做只是为了根据用户权限显示/隐藏选项卡,您可以根据访问级别在 GWT 代码中显示/隐藏选项卡。


将每个选项卡内容定义为单独的 UiBinder 模板。由于 UiBinder 类是复合类,因此您可以将它们添加到任何容器中,就像任何其他小部件一样。

您可以通过将每个 UiBinder 模板对象添加到 TabPanel 中的选项卡中来在代码中组装您的 TabLayoutPanel,或者定义另一个带有 TabPanel 和定义的选项卡的 UiBinder 模板。

如果您使用 UiBinder 路由来模板化 TabLayoutPanel,请通过定义一个指向所有组合所在的包的新 \\'namespace\\' 将选项卡面板内容(您之前使用 UiBinder 定义的组合)导入 UiBinder。然后,您在 UiBinder 模板中将您的组合称为 namespace:ClassName。

if com.project.package 是您保留所有要嵌入到单个选项卡中的复合材料的位置,然后在 xmlns:g 声明后不久将新命名空间 f 定义为 xmlns:f= 'com.project.package'

您将 UiBinder 中的单个组合称为

1
2
<f:Composite1 />
<f:Composite2 />