2010-08-19 9 views
6

Je commence avec une webapp existante construite avec Tapestry.Quelle est l'approche pour ajouter du javascript à une application Tapestry?

Je ne sais pas où mettre le Javascript dont j'ai besoin.

Fondamentalement, cette application a une seule page capturant des données dans une zone de texte, et je veux inclure une bibliothèque javascript pour faire quelque chose avec cette zone de texte.

Quelle est l'approche pour ajouter du javascript à une application Tapestry? Tout échantillon ou lien serait très apprécié.

Chau! :)

Répondre

4

Pour ajouter un comportement côté client à un composant, vous créez généralement une classe component mixin dans le package mixins de votre application:

package my.tapestry.basepackage.mixins; 

public class TextAreaResizer { 

} 

Dans votre modèle de composant, vous ajoutez le mixin à votre texte domaine comme celui-ci:

<textarea t:type="TextArea" t:value="..." t:mixins="TextAreaResizer" /> 

Pour charger une bibliothèque JS dans une page, vous pouvez utiliser l'annotation @IncludeJavaScriptLibrary sur votre mixin, comme ceci:

@IncludeJavaScriptLibrary("context:textarearesizer/js/textarearesizer.js") 
public class TextAreaResizer { 

} 

Si vous devez exécuter un code d'initialisation, qui est fait par le service RenderSupport, comme ceci:

@IncludeStylesheet("context:textarearesizer/css/textarearesizer.css") 
@IncludeJavaScriptLibrary("context:textarearesizer/js/textarearesizer.js") 
public class TextAreaResizer { 

    @Inject 
    private RenderSupport renderSupport; 

    @InjectContainer 
    private TextArea textArea; 

    @AfterRender 
    void addScript() { 
     this.renderSupport.addScript(
      "new TextAreaResizer('%s');", this.textArea.getClientId()); 
    } 

} 

Dans ce cas, j'ai également injecté la composante du champ de texte dans la classe mixin parce que je dois son identifiant client.

Consultez également le AJAX & Javascript section of the T5 docs.

+0

Wow !! .. Je vais essayer. Merci d'avoir répondu. (Je me demande pourquoi je n'ai pas vu ta réponse avant) – OscarRyz

+0

J'essaye de créer un petit script JS qui utilise une variable dans la classe java de mon composant (trouve toutes les occurrences de $ string dans la page et les surligne). Dois-je utiliser la première approche, puis écrire du JavaScript dans la classe publique TextHighlighter? Ou devrais-je l'écrire dans un fichier JS, inclure cette @IncludeJavaScriptLibrary ("texthighlighter.js") et ensuite passer la variable de la classe java au JS? – Ila