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.
Wow !! .. Je vais essayer. Merci d'avoir répondu. (Je me demande pourquoi je n'ai pas vu ta réponse avant) – OscarRyz
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