3

この問題は、例で最もよく説明されています。

GWT アプリに次の ClientBundle があります。

interface Resources extends ClientBundle {
    public static final Resources INSTANCE = GWT.create(Resources.class);

    @Source("defines.css")
    Defines defines();

    @Source("appStyle.css")
    @CssResource.NotStrict
    Style style();

    interface Style extends CssResource {
        String appLogo();
        (...)
    }

    interface Defines extends CssResource {
        String formInputBackgroundColor();
        String formInputBorderColor();
        (...)
    }
}

appStyle.cssアプリケーションで使用されるメインのスタイルシートで、defines.cssは次のような定数のみを含むスタイルシートです。

@def formInputBackgroundColor #D8ECFD;
@def formInputBorderColor #7FAAFF;
(...)

これで、defines.cssUIBinder テンプレート内のスタイルシートとアプリケーション コードで定数を問題なく使用できますが、appStyle.css.

スタイルシートから継承することで「子」スタイルシートの定数にアクセスできるようになることを期待して、すでに に置き換えてみましinterface Style extends CssResourceたが、GWT コンパイラーは次のようなエラーで不平を言います。interface Style extends DefinesDefinesStyle

Rebinding my.project.client.resources.Resources
    Creating assignment for style()
        Replacing CSS class names
            The following obfuscated style classes were missing from the source CSS file:
                formInputBorderColor: Fix by adding .formInputBorderColor{}
                formInputBackgroundColor: Fix by adding .formInputBackgroundColor{}
                (...)

これを達成する方法はありますか?

4

2 に答える 2

1

私はそれを行う方法を見つけましたが、エレガントとはほど遠いので、可能であれば、ある種の継承や注釈を使用するなど、別の解決策を希望します。

私がそれを機能させる方法は、スタイルシートで@eval必要なすべての定数を使用することですが、それは多くのコードの重複につながり、維持するのは面倒です。defines.cssappStyle.css

@eval formInputBackgroundColor Resources.INSTANCE.defines().formInputBackgroundColor();
@eval formInputBorderColor Resources.INSTANCE.defines().formInputBorderColor();

より良い解決策がある場合は、共有してください。

于 2010-07-08T00:40:13.553 に答える
1

交換する

@Source("appStyle.css")

@Source({"defines.css", "appStyle.css"})

トリックを行う必要があります。両方の css ファイルを指定するstyle()と、2 つの結合になります。

于 2011-10-12T22:29:13.660 に答える