2010-08-20 10 views
8

Je voudrais définir certaines couleurs en tant que constantes dans une ressource CssResource GWT et utiliser ces constantes dans l'ensemble de mon application; mais je ne sais pas comment faire ça.Besoin de constantes CSS à l'échelle de l'application dans GWT

Je vais vous dire ce que j'ai essayé. J'ai créé un ClientBundle et CssResource comme suit:

public interface Resources extends ClientBundle { 
    public interface MyStyle extends CssResource { 
    String JUNGLEGREEN(); 
    String example(); 
    ... 
    } 
    @Source("Resources.css") 
    MyStyle css(); 
} 

J'ai défini des constants dans Resources.css:

@def JUNGLEGREEN #1F3D0A; 

Dans Resources.css, j'utilise ces constantes comme ceci:

.example { color:JUNGLEGREEN; } 

Je ne suis pas au courant d'un moyen de réutiliser ces constantes dans d'autres fichiers CSS et modèles UiBinder. Je voudrais le faire dans un autre fichier UiBinder, dit LoginView.ui.xml:

<ui:with field='resources' type='com.example.Resources' /> 
<ui:style> 
    .mainPanel { 
    background:{resources.css.JUNGLEGREEN}; 
    ... 
    } 
</ui:style> 

... mais il ne semble pas compiler. Savez-vous comment je peux atteindre mon objectif?

+0

Cette réponse dans un fil différent pourrait être utile: [http://stackoverflow.com/a/10035774/490369](http://stackoverflow.com/a/10035774/490369) – alshan

Répondre

0

Vous devriez pouvoir utiliser

<ui:style> 
    @IMPORT url("../../../global.css"); 
    .mainPanel { 
    background:{resources.css.JUNGLEGREEN}; 
    ... 
    } 
</ui:style> 
+0

Merci Sudhir. Malheureusement, ça ne marchera pas. Le document doco (http://code.google.com/p/google-web-toolkit/wiki/CssResource#Compile-time_import) indique: "L'instruction @import ne fonctionne que pour d'autres ressources CssResources, pas pour les URL lors de l'exécution, car le .gwt.xml ou StyleInjector peut être utilisé dans ces cas. " – David

+0

Is not Resources.css a cssResource? Une importation de temps de compilation est ce dont je parle ... –

4

Voici comment nous le faisons:

  • nous plaçons tous nos attributs constants dans un fichier constant.css
@def black #241b15; /* text color */ 
@def orange #ff4f00; /* links */
  • dans chaque fichier ui.xml y ous pouvez faire référence à ces constantes de la manière suivante:
<ui:style src="../../resources/css/constants.css"> 
    .myStyle { 
     color: orange; 
    } 
</ui:style>

espoir qui aide.

EDIT:

Pour éviter le chemin relatif dans l'élément <ui:style>, vous pouvez effectuer les opérations suivantes:

  • définir vos constantes à nouveau dans un fichier css (disons constants.css)
@def junglegreen #1f3d0a;
  • créer un ClientBundle et CssResource pour récupérer les constantes définies
public interface MyResources extends ClientBundle { 

    public static final MyResources INSTANCE = GWT.create(MyResources.class); 

    public interface Constants extends CssResource { 

     String junglegreen(); 
    } 

    Constants constants(); 
}

-Utiliser l'annotation @eval pour accéder au

<ui:style> 
    @eval green com.gwt.client.widget.test.MyResources.INSTANCE.constants().junglegreen(); 

    .someClass { 
     color: green; 
    } 
</ui:style>

constante La seule façon que je connaisse la façon de traiter avec des constantes sans référence au fichier css lui-même.

+0

Merci, zOObs. Votre solution est à mi-chemin, mais je n'aime pas que le chemin vers le fichier CSS soit relatif au fichier ui.xml. Il doit y avoir un meilleur moyen. – David

+0

Ajout d'une seconde approche. Voir ma réponse initiale. – z00bs

+0

Merci z00bs pour la deuxième approche. J'étais presque là, mais j'ai utilisé quelque chose comme ... MyResources.INSTANCE.Constants.junglegreen() à la place, conduisant à des messages d'erreur assez cryptiques ... – PhiLho

1

Je sais que cette réponse est peut-être en retard mais peut aider quelqu'un.Je faisais le même problème et a pu le résoudre en ajoutant ce qui suit:.

Resources.css() ensureInjected()

je l'ai ajouté dans mon usine, mais essayé dans quelques endroits et pas importe où je l'ai mis, ça a marché.