【问题标题】:How do I pass a playframework template list item variable as input to a javascript function?如何将 playframework 模板列表项变量作为输入传递给 javascript 函数?
【发布时间】:2014-03-26 08:00:28
【问题描述】:

对不起,如果这是微不足道的,或者在使用不同的术语之前被问过。我对网络编程比较陌生,特别是玩框架。

我的 scala 网页模板如下所示:

@(alarms: List[Alarm], alarmForm: Form[Alarm]) 

@import helper._

@main("Alarm list") { 
    <script id="showInfoScript" language="javascript" type="text/javascript">
   function showInfoFromAlarm(alarm) {
       $("#patientName").text(alarm.Patient.name);
    };
    </script>


    <header>
        <h1> EMHT </h1>
    </header>

 <div class="collumnsContainer">    
    <div> <section class="alarmListSection">
        <h2>@alarms.size() alarm(s)</h2>

        <div class="list-group">
        @for(alarm <- alarms){
          <a href="#" onclick="showInfoScript(@alarm);return false;" class="list-group-item active">
            <h4 class="list-group-item-heading">@{alarm.id} of type @{alarm.`type`} </h4>
            <p class="list-group-item-text">Callee @{alarm.callee.phoneNumber} ;Patient @{alarm.patient.personalNumber} </p>
          </a>
         }  
        </div>

    </section></div> 

我基本上尝试在@for(alarm &lt;- alarms) 中创建每个按钮来调用javascript 函数showInfoScript,并使用与该按钮对应的警报对象实例。

因为它是代码失败。我知道问题是for循环中的对象是一个scala对象,它需要某种转换才能传递给javascript函数。

但是将其转换为 javascript 可以理解的内容的最简单方法是什么?我想到了 json 并且我读过关于做 @Json.toJson(alarm) 的文章,但我收到一个错误,即没有序列化程序并且 Id 需要“为这种类型实现隐式写入或格式”。

【问题讨论】:

    标签: javascript scala playframework playframework-2.2


    【解决方案1】:

    您应该确保清楚了解Scala代码和JavaScript代码之间的区别,Scala代码在服务器端执行以呈现html,该html被发送到执行javascript的客户端。如果你想将数据从你的 Scala 代码传递给 JavaScript,你基本上有两个选择:

    1. 序列化 html 文档中的数据,例如 JSON,但您也可以将其作为标签上的数据属性、带有函数调用的脚本块等使用播放模板生成。
    2. 提供一个单独的 http url,您可以在其中加载来自您的 JavaScript 请求的数据

    您尝试使用 Json.toJson 时遇到的错误是,play 无法知道您希望如何将 Alarm 实例映射到 JSON,因此如果您想这样做,您需要定义一个Writes[Alarm]那个玩可以用。查看有关 json 的播放文档以获取更多信息。 (http://www.playframework.com/documentation/2.2.x/ScalaJson)

    【讨论】:

    • 感谢您的回答。从这个意义上说,我可以在播放模板(或导入的播放模板)中指定对象和 json 之间的映射,并在那里完成转换并在代码在服务器端运行时生成吗?我实际上是在 java 中编写后端代码,虽然我在playframework.com/documentation/2.2.x/JavaJsonRequests 中看到了如何将 json 从 java 发送到模板,但对于模板的某些部分,发送为java 对象并在那里将相关的子对象转换为 json。
    • 啊,抱歉,我想当然地认为您出于某种原因使用了 Scala。然后有一个不同的 API 用于进行 javascript 序列化 (playframework.com/documentation/2.2.x/JavaJsonRequests),但不确定它是如何工作的,或者如何将它应用于您想要放入模板的 json。一种想法可能是在控制器中序列化为 json 并使用 @Html-helper 方法在模板中将其呈现为非转义。
    猜你喜欢
    • 2014-05-11
    • 2020-10-20
    • 2016-09-26
    • 1970-01-01
    • 2018-04-05
    • 2021-11-03
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多