【问题标题】:Play framework : What is the best way to pass on scala template parameter to Javascript (angular)?播放框架:将scala模板参数传递给Javascript(角度)的最佳方法是什么?
【发布时间】:2014-10-06 02:00:29
【问题描述】:

假设我想将一个字符串列表传递给我的模板并通过迭代它来创建一个 ul。 而且我不想使用 ng-init。

动作

 public static Result login(){

    List<String>Names = Arrays.asList("Tom","Dick","Harry");

    return ok(login.render(Names));
}

login.scala.html

@(names: List[String])

<!DOCTYPE html>

<html ng-app="app">

<body>

    <div ng-controller="appCtrl">
        <ul>
          <li ng-repeat="name in names">{{name}}</li>
        </ul>
    </div>

</body>

<script>
    app = angular.module("app", []);

    app.controller('appCtrl', function($scope){

        $scope.names = @Html(names); 
        //This does not work
        // Error : type mismatch; found : java.util.List[String] required: String

    });

</script>
</html>

【问题讨论】:

  • 这没有任何意义。即使@Html 将该列表转换为 ul 列表,您也会收到语法错误。也许您想将其转换为 js 列表?请更明确您想要实现的目标
  • 您可能不知道,但@Html 只是在输出上写入给定值而不自动将其格式化为 HTML(因为此函数特别期望通过手动格式化为HTML)。所以它在任何情况下都不会做这种会添加&lt;ul&gt;标签的神奇转换。
  • @Salem,applicius :请原谅我在这里没有明确表达。我正在尝试更新 $scope.names 这隐含地意味着我需要它作为一个 JS 数组(或对象,这也可以)。 Angular 将使用数组 'names' 来创建
      标签。

标签: java javascript angularjs scala playframework-2.0


【解决方案1】:

如前所述,您可以在传递给 @Html 之前使用 Scala 格式化来显示它而无需转义。

<!-- language: scala -->
@Html(names.mkString("[",",","]"))
// Formats list by starting with '[', ending with ']', with ',' as separator
// aka JS format for array

@Html(names.mkString("""["""", """","""", """"]"""))
// wraps array values with ""

注意如果您的字符串值包含 " 字符,则需要额外的格式。

【讨论】:

  • 没用! @Html(names.mkString("[",","]")) // 错误:Tom 没有定义 @Html(names.mkString("""["", """",""" ", """"]")) // 错误:未闭合的多行字符串文字
  • 第一个错误与提到的代码不对应,其中不包含任何Tom,因此请检查自己的代码是如何编写的。第二个是一个明显的错字(如果不查看已编辑的答案,以及关于字符串的 Scala 文档)。
  • 如前所述,您需要根据您的值调整格式,并希望输出。如果有效,请采纳答案。
  • 嗯,对于第一个,'Tom' 是上面代码中 List 中的第一个值。所以我不确定你答案的第一部分是否正确。但我得到了第二个选项。非常感谢!我还必须传递各种数据格式。下一个是对象列表。我仍然不明白为什么我们要使用这么多双引号。所以不知道如何为对象做这件事。将不胜感激更多的投入。
猜你喜欢
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多