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.css在 UIBinder 模板和应用程序代码中使用样式表中的常量而不会出现问题,但我不能在我的appStyle.css.

我已经尝试用 替换interface Style extends CssResourceinterface Style extends Defines希望从Defines样式表继承可以让我访问“子”Style样式表中的常量,但是 GWT 编译器抱怨如下错误:

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()将成为两者的联合。

于 2011-10-12T22:29:13.660 回答