GWT:如何访问同一ClientBundle中另一个样式表中定义的一个样式表常量

时间:2010-07-08 00:23:40

标签: css gwt cssresource

最好用一个例子来描述这个问题。

我的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;
(...)

现在我可以在UIBinder模板和应用程序代码中使用defines.css样式表中的常量而不会出现问题,但我不能在appStyle.css中使用这些常量。

我已尝试将interface Style extends CssResource替换为interface 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{}
                (...)

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,但它远非优雅,我宁愿使用其他解决方案,例如使用某种继承或注释,如果可能的话。

我开始工作的方式是@eval defines.css appStyle.css样式表中@eval formInputBackgroundColor Resources.INSTANCE.defines().formInputBackgroundColor(); @eval formInputBorderColor Resources.INSTANCE.defines().formInputBorderColor(); 所需的每一个常量,但这会导致大量代码重复,这对于十个分量。

{{1}}

如果您有更好的解决方案,请分享。

答案 1 :(得分:1)

更换

@Source("appStyle.css")

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

应该做的伎俩。通过指定两个css文件,style()将成为两者的联合。