Javascript 将字符串数组分配给js变量,以便自动完成?

Javascript 将字符串数组分配给js变量,以便自动完成?,javascript,playframework,Javascript,Playframework,我在index.html文件中有一个js变量,我想执行如下赋值: var names=["${stateNames}"]; 其中stateNames是包含状态名的Java列表。我如何执行上述赋值,以便名称现在将所有州名称包含在州名称中?变量stateNames从播放控制器传递到index.html 有没有办法做到以上几点???这里有许多不同的选项可供您使用 最简单的选择是创建一个输出逗号分隔列表的JavaExtension 您可以简单地迭代列表,并使用array.push()符号将每个值添加到

我在index.html文件中有一个js变量,我想执行如下赋值:

var names=["${stateNames}"];
其中stateNames是包含状态名的Java列表。我如何执行上述赋值,以便名称现在将所有州名称包含在州名称中?变量stateNames从播放控制器传递到index.html


有没有办法做到以上几点???

这里有许多不同的选项可供您使用

  • 最简单的选择是创建一个输出逗号分隔列表的JavaExtension
  • 您可以简单地迭代列表,并使用array.push()符号将每个值添加到名称数组中
  • 您可以使用script标记在列表上迭代,并输出值
  • 选项1,您需要创建一个如下所示的类

    package ext;
    
    import play.templates.JavaExtensions;
    import java.util.*;
    
    public class MyExtensions extends JavaExtensions {
    
      public static String stringifyList(List list) {
         StringBuffer buff = new StringBuffer();
         for (Object item: list) {
            buff.append("'"+item.toString()+"'"+",");
         }
    
         return buff.toString();
      }
    
    }
    
    然后,您只需在视图中使用JavaExtension来使用它,所以

    var names=[${list.stringifyList()}];
    
    备选方案2和3详述如下

    <script type="text/javascript">
    
       // option 2
       var names = new Array();
       #{list items:list, as:'item'}
        names.push('${item}');
       #{/list}
    
       // option 3
       var names2 = [%{ 
        for (String item: list) {
            out.print("'"+item+"'"+",");
        }
       }%]
    
    </script>
    
    
    //选择2
    变量名称=新数组();
    #{列表项:列表,作为:'item'}
    name.push('${item}');
    #{/list}
    //选择3
    变量名称2=[%{
    用于(字符串项:列表){
    打印(““+”项+“+”,”);
    }
    }%]
    
    如果您使用的是Groovy模板,这很简单,因为您可以访问Groovy的:

    collect
    转换集合,
    join
    创建一个由给定字符串分隔的大字符串

    出于完整性考虑,Scala版本:

    var names = [@(stateNames.map{"\"" + _ + "\""}.mkString(","))];
    
    var names = [@(stateNames.map{"\"" + _ + "\""}.mkString(","))];