是否可以重用GWT UIBinder面板?

问题描述:

我在Google Web Toolkit中使用涉及TabLayoutPanel的UIBinder进行布局。此布局具有将由我的应用程序使用的所有选项卡的超集(将其视为管理员视图)。是否可以重用GWT UIBinder面板?

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

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

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

您可以在代码中组装TabLayoutPanel,方法是将每个UiBinder模板对象添加到TabPanel的选项卡中,或使用TabPanel和所有定义的选项卡定义另一个UiBinder模板。

如果您使用UiBinder路径模板化TabLayoutPanel,通过定义一个指向所有组合所在程序包的新“名称空间”,将标签面板内容(您之前使用UiBinder定义的复合材料)导入到UiBinder中。然后,在UiBinder模板中将您的组合作为名称空间:ClassName引用。

如果com.project.package是您在其中保留所有您想要嵌入到单个选项卡中的组合,然后在xmlns:g声明后不久定义新的名称空间f为xmlns:f= 'com.project.package'

你指个人在复合材料的UiBinder的作为

<f:Composite1 /> 
<f:Composite2 /> 
+0

谢谢,这看起来很有希望。我会给它一个镜头。 – pkaeding

+0

这样做的窍门;谢谢! – pkaeding

+0

很简单,不是吗? –

您肯定可以将您已撰写的视图(包括UIBinder模板和常规的Widget)导入到另一个UIBinder模板中。

UIBinder docs

<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代码中显示/隐藏选项卡。

+0

凡定义股票?我想继续用XML定义我的布局,因为我觉得这比在Java代码中定义它们更容易管理。 – pkaeding

+0

根据上面的代码,股票应该在com.my.app.widgets包中。 – markovuksanovic

+0

是的,我的问题更多的是“股票的UIBinder布局在哪里定义的?”不过,我认为@Ashwin Prabhu的回答可能会回答这个问题。 – pkaeding