GWT: Comment accéder rapidement à des constantes de feuille de style définies dans une autre feuille de style de la même ClientBundle

StackOverflow https://stackoverflow.com/questions/3199880

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top