GWT: как получить доступ к константам одной таблицы стилей, определенным в другой таблице стилей, из того же ClientBundle

Эту проблему лучше всего описать на примере.

В моем приложении 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 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{}
                (...)

Есть ли способ добиться этого?


person tsbnunes    schedule 08.07.2010    source источник


Ответы (2)


Я нашел способ сделать это, но он далек от элегантности, и я бы предпочел другое решение, например, использование какого-либо наследования или аннотаций, если это возможно.

Я заставил это работать @eval каждую нужную мне константу из defines.css в appStyle.css таблице стилей, но это приводит к большому дублированию кода и беспорядку в обслуживании.

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

Если у вас есть лучшее решение, поделитесь, пожалуйста.

person tsbnunes    schedule 08.07.2010

Замена

@Source("appStyle.css")

с участием

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

должен сделать свое дело. Если указать оба файла css, ваш style() будет их объединением.

person Markus Mårtensson    schedule 12.10.2011