2010-04-21 7 views
0

Je crée une application GWT qui utilise UiBinder, et je suis tombé sur un problème bizarre où les styles ne sont pas applicables aux mes éléments - jusqu'à ce que j'Actualisez le navigateur, puis les styles sont appliqués brièvement, en une fraction de seconde avant l'actualisation de la page. En d'autres termes:styles GWT ne pas appliquer les

  1. Page ouverte; aucun de mes styles définis n'est utilisé.
  2. actualisez
  3. Pour une fraction de seconde les styles sont utilisés, avant que la page se vide
  4. La page rechargements, sans les styles à nouveau

Je vais inclure tout mon *ui.xml fichier, parce que ce n'est pas trop grand.

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
    xmlns:g="urn:import:com.google.gwt.user.client.ui"> 
    <ui:style> 
     .idLabelStyle { 
      font-weight: bold; 
      text-align: center; 
      width: 100px; 
      border-style: solid; 
      border-width: 1px; 
      margin-right: 5px; 
     } 

     .nameLabelStyle { 
      font-weight: bold; 
      text-align: center; 
      width: 500px; 
      border-style: solid; 
      border-width: 1px; 
      margin-right: 5px; 
     } 

     .addressLabelStyle { 
      font-weight: bold; 
      text-align: center; 
      width: 500px; 
      border-style: solid; 
      border-width: 1px; 
     } 
    </ui:style> 
    <g:HTMLPanel> 
     <g:HorizontalPanel> 
      <g:Label addStyleNames="{style.idLabelStyle}">ID</g:Label> 
      <g:Label addStyleNames="{style.nameLabelStyle}">Name</g:Label> 
      <g:Label addStyleNames="{style.addressLabelStyle}">Address</g:Label> 
     </g:HorizontalPanel> 
    </g:HTMLPanel> 
</ui:UiBinder> 

J'espère vraiment que je manque quelque chose simple.

Répondre

0

Au lieu de addStyleNames= utiliser setStyleName= ou setStylePrimaryName= J'ai eu ce problème dans le passé et il a réparé dans mon cas. Note: les deux possiblités sont indiqués ci-dessous ...

setStyleName 
Clears all of the object's style names and sets it to the given style. You should normally use setStylePrimaryName(String) unless you wish to explicitly remove all existing styles. 

setStylePrimaryName 
Sets the object's primary style name and updates all dependent style names. 
+0

Merci Romain. Toujours pas de chance, cependant. Je reçois le même résultat qu'avant. ID et ID sont tous deux me donne les mêmes résultats. – sernaferna

+1

try ID –

+0

'styleName =" ... "' est correct, GWT traduit cela en 'setStyleName' derrière les scènes. –

0

Heureusement ou malheureusement, je ne suis plus en utilisant ce widget dans mon application; Cependant, je ne voulais pas perdre le code, car ce problème me rendait fou et je voulais savoir ce qui me manquait.

Malheureusement, après avoir modifié mon code, puis rajouté le widget pour le tester, je ne peux plus reproduire le problème.

C'est peut-être la façon dont j'ajoute le widget à mon interface utilisateur; Je ne me souviens pas comment je l'ai ajouté à l'origine (il y avait trop de changements), mais je l'ajoute maintenant à un VerticalPanel en utilisant la méthode add(Widget), et les styles s'appliquent maintenant sans problème.

Merci aux commentateurs qui m'ont suivi sur ma chasse aux oies sauvages. Je voudrais avoir une réponse plus satisfaisante ...

+0

A fait un peu plus de recherche et ... Le problème est que GWT obfuscate les styles. Voir http://groups.google.com/group/google-web-toolkit/browse_thread/thread/dde31397ef4914a1/9e27674998a20645 –

+0

GWT masque les styles, mais tant que vous utilisez le format ci-dessus, tout va bien. c'est-à-dire 'addStyleNames =" {style.idLabelStyle} "' - remarquez les accolades, et le fait que nous qualifions le nom du style avec le préfixe 'style.'. Lorsque GWT compile ce code, il utilise les noms obfusqués sous les couvertures, mais notre code peut utiliser les noms que nous définissons. – sernaferna

Questions connexes