2012-03-19 4 views
4

Je suis en train de transférer un système de grille CSS simple à GWT. Mon fichier CSS a actuellement des cours comme .size1, .size2 etc., et j'ai une ressource CSS qui ressemble -Noms de classes CSS dynamiques dans GWT

interface MyResource extends CSSResource { 

    @ClassName("size1") 
    String size1(); 

    @ClassName("size2") 
    String size2(); 

    // And so on 
} 

Mais ce que je veux vraiment, est d'avoir une seule fonction comme ce qui suit -

String size(int size); 

qui générera la classe appropriée si la taille est passée en entier au moment de l'exécution. Ceci est nécessaire car j'effectue quelques calculs pour déterminer l'espace réel disponible/nécessaire pour un widget en javascript et ensuite attacher le nom de classe approprié.

Est-ce quelque chose qui est même possible avec GWT?

Modifier: Pour clarifier les choses, je peux facilement écrire moi-même une telle méthode comme si -

String size(int size) { 
    switch(size) { 
    case 1: return size1(); 
    case 2: return size2(); 
    ... and so on 
    } 
} 

Cependant MyResource est une interface et sa mise en œuvre est générée lors de l'exécution par GWT. Cela signifie que je ne peux pas ajouter ma méthode size au type MyResource. Donc je suppose que je demande un moyen d'ajouter des méthodes personnalisées à la classe MyResource.

+0

pouvez-vous s'il vous plaît élaborer –

+0

Eh bien, je ne suis pas sûr quelle partie de la question que je devrais élaborer. Fondamentalement, une CSSResource dans GWT est une interface avec une méthode qui a un mappage un-à-un avec des classes CSS. J'ai besoin d'une seule méthode pour générer des noms de classe différents, en fonction des paramètres passés à cette méthode. Je pourrais facilement écrire moi-même cette méthode, une CSSResource est une interface et ne peut pas avoir des implémentations concrètes de méthodes. –

Répondre

1

Je pense que vous ne devriez pas essayer de résoudre cela via des fichiers CSS, mais si vous voulez avoir des valeurs dynamiques dans votre style, vous devez définir ces valeurs dans le code via myWidget.getElement().getStyle().setSomeCssMethod(). Ou dans ce cas, vous semblez vouloir définir la taille, comme en hauteur et en largeur. Pour la plupart des widgets, ces valeurs peuvent être définies directement. A moins que je ne manque quelque chose, pourquoi voulez-vous utiliser les classes CSS et ne pas le définir directement dans le code?

+0

J'essaie d'utiliser un système de grille CSS qui définit des classes comme "taille1" - "taille16", "offset1" - "offset16", etc. C'est une chose assez courante pour un système de grille CSS. Cependant, essayer d'intégrer ce schéma dans GWT CSSResource, c'est me lancer contre un mur après l'autre. Je peux bien sûr définir moi-même la largeur et la hauteur (et d'autres propriétés CSS), mais cela va à l'encontre du but de CSSResource. –

1

Vous ne pouvez pas transmettre les noms de méthode à la ressource CSS. Rappelez-vous que le but de CSSResource est de réduire et de masquer les noms de classes CSS.

Cependant, simplement parce que la ressource CSS peut cela ne signifie pas que vous devez l'utiliser pour tout ce que vous codez. Par exemple, vous savez déjà que les méthodes CSS Resource renvoient une chaîne, alors créez simplement votre propre méthode qui renvoie une chaîne (vos noms de classe dynamiques) et pour charger votre CSS utilisez l'annotation @CssResource.NotStrict lorsque vous l'ajoutez à votre ressource.