簡體   English   中英

將字符串數組分配給js變量以便在播放中自動完成?

[英]Assigning String array to js variable for autocomplete in play?

我在index.html文件中有一個js變量,我想做一個像這樣的賦值:

var names=["${stateNames}"];

其中stateNames是包含州名的Java List。 我如何進行如上所述的賦值,以便名稱現在包含stateNames中包含的所有州名? 變量stateNames從播放控制器傳遞給index.html。

有什么方法可以做到嗎?

如果您使用的是Groovy模板,這很簡單,因為您可以訪問Groovy的集合方法

var names=[${stateNames.collect{'"'+it+'"'}.join(",")}];

collect轉換您的集合, join創建一個由給定String分隔的大字符串。

Scala版本為了完整性的緣故:

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

您可以在此處使用許多不同的選項。

  1. 最新的選擇是創建一個輸出逗號分隔列表的JavaExtension。
  2. 您可以簡單地遍歷列表並使用array.push()表示法將每個值添加到names數組中。
  3. 您可以使用腳本標記迭代列表,然后輸出值

選項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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM