【问题标题】:What's the approach to add javascript to a Tapestry application?将 javascript 添加到 Tapestry 应用程序的方法是什么?
【发布时间】:2010-08-19 22:15:59
【问题描述】:

我从使用 Tapestry 构建的现有网络应用开始。

我不知道在哪里放置我需要的 Javascript。

基本上,这个应用程序有一个将数据捕获到文本区域的页面,我想包含一个 javascript 库来处理该文本区域。

将 JavaScript 添加到 Tapestry 应用程序的方法是什么?任何样本或链接将不胜感激。

周! :)

【问题讨论】:

    标签: java javascript tapestry web-applications


    【解决方案1】:

    要向组件添加一些客户端行为,您通常会在应用的 mixins 包中创建一个 component mixin 类:

    package my.tapestry.basepackage.mixins;
    
    public class TextAreaResizer {
    
    }
    

    在您的组件模板中,您将 mixin 添加到您的文本区域,如下所示:

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

    要将 JS 库加载到页面中,您可以在 mixin 上使用 @IncludeJavaScriptLibrary 注释,如下所示:

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

    如果您需要运行一些初始化代码,可以通过RenderSupport 服务完成,如下所示:

    @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());
        }
    
    }
    

    在这种情况下,我还将文本字段组件注入到 mixin 类中,因为我需要它的客户端 ID。

    还可以查看AJAX & Javascript section of the T5 docs

    【讨论】:

    • 哇!!我会试一试的。感谢你的回答。 (我不知道为什么我之前没有看到你的答案)
    • 我正在尝试创建一个小的 JS 脚本,该脚本利用我组件的 java 类中的一个变量(在页面中查找 $string 的所有实例并突出显示它们)。我应该使用第一种方法,然后将 JavaScript 写入公共类 TextHighlighter 中吗?或者我应该将它写入一个 JS 文件,包括 @IncludeJavaScriptLibrary("texthighlighter.js") 然后以某种方式将变量从 java 类传递给 JS?
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2016-07-26
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多