【问题标题】:Is it possible to reuse GWT UIBinder panels?是否可以重用 GWT UIBinder 面板?
【发布时间】:2011-03-07 15:05:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: gwt code-reuse uibinder


    【解决方案1】:

    您绝对可以将您编写的视图(包括 UIBinder 模板和常规 Widgets)导入另一个 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 代码中显示/隐藏选项卡。

    【讨论】:

    • 股票在哪里定义?我想继续在 XML 中定义我的布局,因为我觉得这比在 Java 代码中定义它们更易于管理。
    • 根据上面的代码,Stocks 应该在 com.my.app.widgets 包中。
    • 是的,我的问题更像是“股票的 UIBinder 布局在哪里定义?”不过,我认为@Ashwin Prabhu 的回答可能会回答这个问题。
    【解决方案2】:

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

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

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

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

    您将 UiBinder 中的单个组合称为

    <f:Composite1 /> 
    <f:Composite2 />
    

    【讨论】:

    • 谢谢,这看起来很有希望。我会试一试。
    • 是的,我知道必须有一个简单的方法来做到这一点!但是,我确实对使用这种方法时不会自动调用 onModuleLoad() 感到惊讶。这是可以预期的吗?我自己可以从构造函数中调用它,一切似乎都在工作,但我只是想确保我没有遗漏任何东西(再次:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多