开发者

What's the approach to add javascript to a Tapestry application?

开发者 https://www.devze.com 2023-01-12 03:00 出处:网络
I\'m starting with an existing webapp built with Tapestry. I can\'t figure out where to put the Javascript I need.

I'm starting with an existing webapp built with Tapestry.

I can't figure out where to put the Javascript I need.

Basically this application has a single page capturing data into a text area, and I want to include a javascript library t开发者_高级运维o do something with that text area.

What's the approach to add javascript to a Tapestry app? Any sample or link would be much appreciated.

Chau! :)


To add some client-side behaviour to a component, you usually create a component mixin class in the mixins package of your app:

package my.tapestry.basepackage.mixins;

public class TextAreaResizer {

}

In your component template, you add the mixin to your text area like this:

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

To load a JS library into a page, you can use the @IncludeJavaScriptLibrary annotation on your mixin, like this:

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

}

If you need to run some initialization code, that's done through the RenderSupport service, like this:

@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 this case, I have also injected the text field component into the mixin class because I need its client ID.

Also check out the AJAX & Javascript section of the T5 docs.

0

精彩评论

暂无评论...
验证码 换一张
取 消