【问题标题】:How can I use custom template tags inside javascript in the Play! framework?如何在 Play 中的 javascript 中使用自定义模板标签!框架?
【发布时间】:2011-08-13 18:09:55
【问题描述】:

如何在我的 javascript 代码中使用自定义标签?例如:

function toHTML(message){
    return #{customTag message:message /};
}

不工作..

谢谢!

//一些澄清

我正在使用 AJAX 检索消息列表,并且我有一个名为“customTag”的 html 标记,其中包含用于将消息格式化为 <li> 元素的 html 代码。

如果我打电话

#{customTag message:'hello' /} 

直接在 HTML 文件中,它可以工作并将其替换为<li>hello</li>。但是当我尝试从 javascript 调用它时,我收到一条错误消息。

【问题讨论】:

    标签: javascript html playframework


    【解决方案1】:

    您遇到的问题是您试图将服务器端逻辑(模板的呈现)与客户端事件(javascripts 执行)混合在一起。因此,您的方法将不起作用,因为自定义标记在您到达客户端之前从服务器端执行。

    您可以使用 Play 标记使其工作,但我建议您考虑使用 Javascript 模板来执行此类客户端。查看 Play 下载的 samples-and-tests 文件夹中的 Chat 应用程序,了解它的运行情况。但是,如果您想使用 Play 模板/标签使其正常工作,请参见下文。

    如果您更改自定义标记,使其不接受输入,而是“感知”javascript 变量,那么这应该可以工作。所以你的标签代码看起来像

    "<li>" +message+ "</li>";
    

    所以,这不使用标签将变量传递给标签,而是使用客户端的javascript变量。

    我在测试应用程序 (views/Application/index.html) 中使用以下代码对此进行了测试,它按预期输出了 javascript。

    <html><head></head>
    <body>
    <script type="text/javascript">
        function toHTML(message){
            return #{message /}
        }
    
        alert(toHTML("hello"));
    </script>
    </body>
    </html>
    

    【讨论】:

    • 是的,这就是我最终想出来的,所以我现在使用 EJS,效果很好!
    【解决方案2】:

    这行不通。尝试在您的值周围使用双引号。或者,把你真正想要的写清楚。

    【讨论】:

      【解决方案3】:

      在我看来,这是行不通的,因为自定义标签是在服务器端评估的,即在内容发送到客户端之前,然后在解释 JavaScript 之前。

      [对不起我的英语!]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多