使用 GWT 2.4.0 我正在尝试使用延迟绑定规则将 uibinder 模板替换为另一个。
我想出的方法是为每个返回 uibinder 实例的 uibinder 模板创建一个具体类。这是一个例子。
public class ThemeOneUiBinderImpl {
@UiTemplate("ThemeOne.ui.xml")
interface ThemeOneUiBinder extends UiBinder<Widget, PageToTheme> {
}
private static ThemeOneUiBinder uiBinder = GWT.create(ThemeOneUiBinder.class);
public static UiBinder<Widget, PageToTheme> getImpl() {
return uiBinder;
}
}
然后我有第二个基本相同的类,称为 ThemeTwoUiBinderImpl。我的班级引用 ThemeOneUiBinderImpl 并调用 getImpl().createAndBindUi(this)
以及以下延迟绑定规则
<replace-with class="package.ThemeTwoUiBinderImpl">
<when-type-is class="package.ThemeOneUiBinderImpl"/>
<when-property-is name="theme" value="theme2"/>
</replace-with>
有了这些规则,当我编译时,我看到排列的数量增加了一倍,所以它正在做一些事情......但是当我加载页面时,theme1 uibinder 仍在加载。我有两个问题:
- 为什么它不起作用?
- 为什么排列的数量会加倍?我认为通过将属性设置为theme2,它只会为theme2编译排列,但它是否为两者都编译?
- 我是否使用了延迟绑定,它是如何设计使用的?我确实使用与我正在做的类似的外观模式进行了评估,但对于我需要做的事情来说似乎完全是矫枉过正,而且我已经编写了两个自定义 uibinder。这些组件将不可重用或扩展。主题仅适用于简单的自定义标题。
想法?解决方案?谢谢!