GWT переопределяет стиль GSS в другом файле GSS

Поскольку мое приложение стало больше, я решил, что каждый "модуль" моего приложения будет иметь свой собственный файл ресурсов, файл стилей и файл GSS. Кроме того, стили для кнопок, например, будут в другом глобальном файле GSS, поскольку это скорее стиль приложения, используемый в приложении.

Это не проблема, но когда я хотел сделать что-то вроде этого:

.buttonGroup>.button.active{ background-color: red}

в одном из модулей он не совпадает ни с чем.

Поскольку стиль кнопки (buttonGroup, button, active) и поведение (добавить "активный" класс при нажатии) указан в другом (глобальном) файле GSS, я не могу изменить стиль "активного" класса.

Вот упрощенный пример:

public interface AppResources extends ClientBundle {

    public static AppResources INSTANCE = GWT.create(AppResources.class);

    @Source({"style.gss"})
    AppStyle appStyle();
}

Файл стиля:

public interface AppStyle extends CssResource {

    String buttonGroup();
    String button();
    String active();
}

Модуль:

public interface ModuleResources extends AppResources{

    public static ModuleResources INSTANCE = GWT.create(ModuleResources.class);

    @Source({"style.gss","module.gss"})
    ModuleStyle moduleStyle();
}

Файл стиля:

public interface ModuleStyle extends AppStyle {
}

В файлах GSS я пытался использовать @provide и @require (без него он не скомпилировался бы, поскольку в нем отсутствовали бы идентификаторы или классы).

Затем он прекрасно компилируется, но buttonGroup, button и даже активный класс обрабатываются как принадлежащие AppStyle, поэтому используются стили style.gss и правило:

.buttonGroup>.button.active{ background-color: red}

в файле module.gss ничего не совпадает, поскольку он, вероятно, ищет классы.hash-ModuleStyle-buttonGroup, .hash-ModuleStyle-button и .hash-ModuleStyle-active, тогда как фактические стили на кнопке - это .hash-AppStyle-buttonGroup и т.п.

2 ответа

Это на самом деле именно то, что @Import предназначен для решения!

В конце концов, я решил это с помощью @external на классах, которые хотел использовать в разных таблицах стилей GSS.

Используя @external, все классы из виджетов, которые имеют свои собственные таблицы стилей, сохраняют имена своих классов необъясненными, чтобы их можно было переопределить в любой таблице стилей модуля.

Я не хотел делать это раньше, но это было единственное решение, которое я мог придумать.

Другие вопросы по тегам