Um einige clientseitige Verhalten zu einer Komponente hinzufügen, können Sie in der Regel erstellen component mixin Klasse im mixins
Paket Ihrer App:
package my.tapestry.basepackage.mixins;
public class TextAreaResizer {
}
In Ihrer Komponente Vorlage, können Sie die mixin zu Ihrem Text hinzufügen Bereich wie folgt aus:
<textarea t:type="TextArea" t:value="..." t:mixins="TextAreaResizer" />
eine JS-Bibliothek in eine Seite zu laden, können Sie die @IncludeJavaScriptLibrary Anmerkung auf Ihrem mixin wie folgt verwenden:
@IncludeJavaScriptLibrary("context:textarearesizer/js/textarearesizer.js")
public class TextAreaResizer {
}
Wenn Sie einige Initialisierungscode ausführen müssen, ist, dass durch die RenderSupport Dienst getan, wie folgt aus:
@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());
}
}
In diesem Fall habe ich auch den Text Feldkomponente in die mixin Klasse injiziert, weil ich brauche seine Client-ID.
Überprüfen Sie auch die AJAX & Javascript section of the T5 docs.
Wow !! .. Ich werde es versuchen. Danke für die Antwort. (Ich frage mich, warum ich deine Antwort vorher nicht gesehen habe) – OscarRyz
Ich versuche, ein kleines JS-Skript zu erstellen, das eine Variable in der Java-Klasse meiner Komponente verwendet (finde alle Instanzen von $ string in der Seite und markiere sie). Soll ich den ersten Ansatz verwenden und dann JavaScript zB in öffentliche Klasse TextHighlighter schreiben? Oder sollte ich es in eine JS-Datei schreiben, diese @IncludeJavaScriptLibrary ("textthighlighter.js") einfügen und dann irgendwie die Variable von der Java-Klasse an die JS übergeben? – Ila