javascript - 尝试在 javascript 中对 java 变量使用 .get 方法
问题描述
我正在尝试创建一个网页(使用播放框架),它显示用户的姓名、出生日期等。我遇到困难的地方是试图在 html 页面中显示未知大小的列表。我目前有:
@(currentUser : Profile)
@main("Profile") {
<div>
<h1><b>@currentUser.getFirstName() @currentUser.getLastName()</b></h1>
<p>@currentUser.getDateofBirth</p>
<b>Nationalities</b>
<ul><p id="natInput"></p></ul>
<script>
for (var i = 0; i < "@currentUser.getNationalities().size()"; i++) {
document.getElementById("natInput").innerHTML += "<li>" + "@currentUser.getNationalities().get(i)" + "</li>";
}
</script>
</div>
}
Profile 是一个基本的 java 类,它只包含 getter 和 setter,并且 .getNationalities 返回一个 List。@Main 是另一个 html 文件,它存储网站的基本设计,与此无关。
如您所见,我正在尝试使用 .get 方法来遍历用户的国籍列表,但不幸的是,get 中使用的“i”变量无法识别,因为它是 html 中的 javascript 变量。此代码的所有其他部分似乎都按预期工作,当“i”被替换为整数(例如 0 或 1)时,.get 工作。
有什么想法可以获取此列表中的每个单独元素吗?任何帮助将不胜感激
解决方案
问题是你搞乱了页面生成的不同步骤。
首先,我们应该清除从render
Play 控制器中的命令到浏览器中完全呈现的页面的处理步骤。
Twirl 是一个模板引擎,允许您使用 Scala 生成 HTML 页面。此步骤在服务器端执行,在 HTML 页面发送到浏览器之前。在此步骤中,不考虑 Javascript 代码。
因此,在命令之后的第一步render
,选择并渲染 twirl 模板,评估每个 Twirl/Scala 指令。这将生成一个没有更多 Scala 代码的 HTML 文件。
这个生成的页面被发送到浏览器。然后页面被加载到浏览器中,并且 Javascript 代码被评估为任何其他带有 JS 的 HTML 页面。
这可以解释为什么您无法按照您的方式呈现页面。
如果您的页面是静态的,那么正确的方法是仅使用 twirl 指令来迭代数组Twirl Template - Iterating
getNationalities()
如果方法返回一个 Scala 列表,您应该能够像下面这样重写您的列表生成
<ul>
@for(nationality <- currentUser.getNationalities()) {
<li>@nationality</li>
}
</ul>
推荐阅读
- apache-spark - 处理大型数据集时如何提高 Spark 提交作业的性能?
- html - angular.element 中的特殊字符
- react-native - TabNavigator 中的条件屏幕
- php - 通过隐藏字段中的联系表格通过电子邮件发送产品图片
- c# - C# , 在 Linux 系统中用 Mono 编译
- python - 无法过滤熊猫数据框中的索引
- angular - zone.js:2969 GET http://localhost:4200/null 404(未找到)
- vhdl - 在 VHDL 中实现简单的双端口块 ram 未按预期执行
- python - 如何“取消最终确定”图表?
- java - 实例化新的 TextToSpeech 会产生 NullPointer 异常