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 という 2 番目のクラスがあります。私のクラスは ThemeOneUiBinderImpl を参照し、getImpl().createAndBindUi(this) を呼び出します
そして、次の遅延バインディング ルール
<replace-with class="package.ThemeTwoUiBinderImpl">
<when-type-is class="package.ThemeOneUiBinderImpl"/>
<when-property-is name="theme" value="theme2"/>
</replace-with>
これらのルールを設定すると、コンパイルすると、順列の数が 2 倍になり、何かが実行されていることがわかります...しかし、ページを読み込むと、theme1 uibinder がまだ読み込まれています。2 つの問題があります。
- なぜ機能しないのですか?
- 順列の数が 2 倍になるのはなぜですか? プロパティを theme2 に設定すると、theme2 の順列のみがコンパイルされると思いましたが、両方に対してコンパイルされますか?
- 遅延バインディングをどのように使用するように設計されていますか? 私がやっていることと似た外観パターンを使用して評価しましたが、私がする必要があることは完全にやり過ぎのようで、すでに2つのカスタムuibindersを書いています。これらのコンポーネントは、再利用または拡張できません。テーマは、単純なカスタム ヘッダー用です。
考え?ソリューション?ありがとう!