【问题标题】:Attempting to use .get method on java variable in javascript尝试在 javascript 中对 java 变量使用 .get 方法
【发布时间】:2019-03-02 01:38:26
【问题描述】:

我正在尝试创建一个网页(使用播放框架),该网页显示用户的姓名、出生日期等。我遇到困难的地方是尝试在 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”变量无法识别,因为它是一个 javascript 变量在 html 中。 此代码的所有其他部分似乎都按预期工作,当“i”被替换为整数(例如 0 或 1)时,.get 工作。

有什么想法可以让我得到这个列表中的每个元素吗?任何帮助将不胜感激

【问题讨论】:

    标签: javascript java html playframework


    【解决方案1】:

    问题是你搞乱了页面生成的不同步骤。

    首先,我们应该清除从 Play 控制器中的 render 命令到浏览器中完全呈现的页面的处理步骤。

    Twirl 是一个模板引擎,允许您使用 Scala 生成 HTML 页面。 此步骤在服务器端执行,在 HTML 页面发送到浏览器之前。 在此步骤中,不考虑 Javascript 代码。

    所以在render 命令之后的第一步,选择并渲染旋转模板,评估每个旋转/Scala 指令。这将生成一个没有更多 Scala 代码的 HTML 文件。

    这个生成的页面被发送到浏览器。然后页面被加载到浏览器中,并且 Javascript 代码被评估为任何其他带有 JS 的 HTML 页面。


    这可以解释为什么您无法按照您的方式呈现页面。

    如果您的页面是静态的,正确的方法是仅使用 twirl 指令来遍历数组 Twirl Template - Iterating

    如果 getNationalities() 方法返回一个 Scala 列表,您应该能够像下面这样重写您的列表生成

    <ul>
    @for(nationality <- currentUser.getNationalities()) {
       <li>@nationality</li>
    }
    </ul>
    

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多