2010-08-19 3 views
6

Ich beginne mit einer bestehenden Webapp mit Tapestry gebaut.Was ist der Ansatz zum Hinzufügen von JavaScript zu einer Tapestry-Anwendung?

Ich kann nicht herausfinden, wo ich das Javascript brauche, das ich brauche.

Grundsätzlich hat diese Anwendung eine einzelne Seite, die Daten in einen Textbereich erfasst, und ich möchte eine Javascript-Bibliothek einschließen, um etwas mit diesem Textbereich zu tun.

Was ist der Ansatz, um einer Tapestry-App JavaScript hinzuzufügen? Jede Probe oder Verbindung würde sehr geschätzt werden.

Chau! :)

Antwort

4

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.

+0

Wow !! .. Ich werde es versuchen. Danke für die Antwort. (Ich frage mich, warum ich deine Antwort vorher nicht gesehen habe) – OscarRyz

+0

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

Verwandte Themen