2010-08-20 14 views
8

Me gustaría definir algunos colores como constantes en un GWT CssResource, y usar esas constantes en toda mi aplicación; pero no sé cómo hacer eso.Necesita constantes de CSS en toda la aplicación en GWT

Te diré lo que he intentado. He creado un ClientBundle y una CssResource de la siguiente manera:

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

he definido algunos constants en Resources.css:

@def JUNGLEGREEN #1F3D0A; 

Dentro Resources.css, utilizo esas constantes de este modo:

.example { color:JUNGLEGREEN; } 

No conozco una forma de reutilizar esas constantes en otros archivos CSS y plantillas de UiBinder. Me gustaría hacer esto en algún otro archivo UiBinder, digo LoginView.ui.xml:

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

... pero no parece que compilar. ¿Sabes cómo puedo lograr mi objetivo?

+0

Esta respuesta en un hilo diferente podría ser útil: [http://stackoverflow.com/a/10035774/490369](http://stackoverflow.com/a/10035774/490369) – alshan

Respuesta

0

Usted debe ser capaz de utilizar

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

Gracias Sudhir. Lamentablemente, no funcionará. El doco (http://code.google.com/p/google-web-toolkit/wiki/CssResource#Compile-time_import) dice: "La declaración @import solo funcionará para otras fuentes CSS, no para las URL en tiempo de ejecución, ya que el .gwt.xml o StyleInjector se puede usar en esos casos ". – David

+0

¿No es Resources.css a cssResource? Una importación en tiempo de compilación es de lo que estoy hablando ... –

4

Esto es cómo lo hacemos:

  • colocamos todos nuestros atributos constantes en un archivo constant.css
@def black #241b15; /* text color */ 
@def orange #ff4f00; /* links */
  • en cada archivo ui.xml y ou puede hacer referencia a esas constantes de la siguiente manera:
<ui:style src="../../resources/css/constants.css"> 
    .myStyle { 
     color: orange; 
    } 
</ui:style>

Espero que ayude.

EDIT:

Para evitar la ruta relativa en el elemento <ui:style> que podría hacer lo siguiente:

  • definir sus constantes de nuevo en un archivo CSS (por ejemplo constants.css)
@def junglegreen #1f3d0a;
  • crear un ClientBundle y CssResource para recuperar las constantes definidas
public interface MyResources extends ClientBundle { 

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

    public interface Constants extends CssResource { 

     String junglegreen(); 
    } 

    Constants constants(); 
}

-uso del @eval anotación para acceder a la constante

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

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

La única forma que conozco de cómo hacer frente a las constantes y sin hacer referencia al archivo CSS en sí.

+0

Gracias, zOObs. Su solución es parte del camino, pero no me gusta que la ruta al archivo CSS sea relativa al archivo ui.xml. Debe haber una mejor manera. – David

+0

Se agregó un segundo enfoque. Ver mi respuesta inicial. – z00bs

+0

Gracias z00bs por el segundo enfoque. Estaba casi allí, pero usé algo así como ... MyResources.INSTANCE.Constants.junglegreen(), lo que me llevó a mensajes de error bastante crípticos ... – PhiLho

1

Sé que esta respuesta podría ser un poco tarde pero puede ayudar a alguien.Yo estaba teniendo el mismo problema y era capaz de resolverlo mediante la adición de lo siguiente:.

Resources.css() ensureInjected()

he añadido en mi fábrica, pero lo probé en un par de lugares y sin importa dónde lo puse, funcionó.

Cuestiones relacionadas