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, все классы из виджетов, которые имеют свои собственные таблицы стилей, сохраняют имена своих классов необъясненными, чтобы их можно было переопределить в любой таблице стилей модуля.
Я не хотел делать это раньше, но это было единственное решение, которое я мог придумать.