2010-10-25 6 views
0

Cela fait un moment que j'ai touché GWT, mais récemment, je regardais les applications GWT pour voir comment elles accomplissaient certaines tâches. J'ai remarqué que si vous allez dans AdWords (une application GWT), vous pouvez manipuler les informations de la table en ligne. Par exemple, si j'entre dans ma campagne et que je clique sur l'icône en forme de crayon à côté du groupe d'annonces, une petite fenêtre apparaîtra, me permettant de changer le nom du groupe d'annonces ... sauf qu'il n'y a aucune information d'identification dans la structure DOM. Pas de champs cachés, pas d'identifiant caché dans les éléments div.Comment GWT "sait" quel élément DOM vous venez de sélectionner?

Que se passe-t-il ici? J'ai travaillé avec des tables interactives, mais j'ai toujours mis en place un gestionnaire de clics sur une classe et y ai placé un identifiant pour que je sache ce que je suis en train d'éditer. J'ai toujours trouvé cela insatisfaisant. Des idées?

+0

Eh bien, si vous avez une référence à un élément que vous pouvez définir son gestionnaire d'événements onclick directement 'element.onclick = doSomething()'. Puisque chaque widget GWT sait que ses gestionnaires d'éléments peuvent être ajoutés de cette façon. Je ne sais pas si tu veux dire ça. – z00bs

+0

Oui, mais comment est-ce qu'il se connecte à une référence d'objet? Dans un fichier html traditionnel, vous auriez un formulaire avec un champ Id caché, même si vous vous connectez à l'élément, il n'y a rien pour différencier une ligne d'une autre. Il n'y a pas de champ d'identification, cela a-t-il un sens? –

+1

Un widget crée son élément sous-jacent via 'document'. Par conséquent, il connaît son élément (pas besoin de récupérer l'élément via un identifiant ou autre). Jetez un oeil au constructeur 'Button' pour voir comment il est créé. – z00bs

Répondre

1

Il utilise une variable JavaScript pour mettre en attente l'élément directement lors de sa création. Cette variable peut ensuite être stockée quelque part - tant qu'elle est accessible directement ou indirectement à partir de l'objet global (document), elle peut être récupérée plus tard à partir de là.

Un simple exemple pur JavaScript serait:

document.myParagraph = document.createElement('p'); 
document.body.appendChild(myParagraph); 

document.mySpan = document.createElement('span'); 
document.myParagraph.appendChild(mySpan); 

... 

document.mySpan.onclick = ... 
+0

Ah, oui! Cela a beaucoup plus de sens. Je pensais que faire cela était une mauvaise pratique (lors de l'écriture en Javascript pur), suis-je mal informé ou le fait que tout cela est géré, javascript compilé qui concerne l'utilisation de variables globales comme ceci n'est tout simplement pas là? –

+0

@chum: Eh bien, c'est juste un exemple simple qui devrait montrer le principe de la façon dont les variables peuvent être consultées. Ce ne serait pas une bonne idée de stocker vraiment chaque variable directement dans le document - mais tout ce dont vous avez vraiment besoin est une référence (directe ou indirecte) à un objet, qui peut ensuite stocker d'autres objets, etc. 'method - vous avez besoin d'un point de départ global, mais le reste n'a pas besoin d'être dans des variables globales (et ne devrait pas l'être). Le point de départ peut également être un gestionnaire d'événements, vous n'avez donc pas besoin de démarrer directement le document. –

Questions connexes