GWT: Comment accéder rapidement à des constantes de feuille de style définies dans une autre feuille de style de la même ClientBundle
-
02-10-2019 - |
Question
Ce problème est décrit le mieux avec un exemple.
Je l'ClientBundle suivante dans mon application GWT:
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();
(...)
}
}
Le appStyle.css
est la principale feuille utilisée par l'application et le defines.css
est une feuille contenant des constantes seulement comme:
@def formInputBackgroundColor #D8ECFD;
@def formInputBorderColor #7FAAFF;
(...)
Maintenant, je peux utiliser les constantes dans la feuille de style defines.css
à l'intérieur des modèles UIBinder et dans le code d'application sans problème, mais je ne peux pas utiliser ces constantes dans mon appStyle.css
.
Je l'ai déjà essayé de remplacer interface Style extends CssResource
avec interface Style extends Defines
, en espérant que héritant de la feuille de style Defines
me donner accès aux constantes dans le Style
stylesheet « enfant », mais le compilateur GWT se plaint avec des erreurs comme:
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{}
(...)
Y at-il moyen d'y parvenir?
La solution
J'ai trouvé une façon de le faire, mais il est loin d'être élégant et je préfère une autre solution, comme l'utilisation d'une sorte d'héritage ou des annotations, si possible.
La façon dont je l'ai eu au travail est de @eval
chaque constante dont j'ai besoin defines.css
dans la feuille de style appStyle.css
, mais cela conduit à beaucoup de duplication de code et il est un gâchis à mantenir.
@eval formInputBackgroundColor Resources.INSTANCE.defines().formInputBackgroundColor();
@eval formInputBorderColor Resources.INSTANCE.defines().formInputBorderColor();
Si vous avez une meilleure solution, s'il vous plaît part.
Autres conseils
Remplacement
@Source("appStyle.css")
avec
@Source({"defines.css", "appStyle.css"})
devrait faire l'affaire. En spécifiant les deux fichiers de votre css style()
sera une union des deux.