我正在使用 Java 的 Play 框架 (2.4)。我想将 JSONObject 传递给 Play View 模板之一内使用的 javascript。
在 Java 端,我准备 JSONObject,如下所示:

(请记住,这是一辆测试车辆。)

    public static Result showBusinesses(){ 
    List<Item> list = new ArrayList<Item>(); 
    Item r = new Item(); 
    r.id = "23234"; 
    r.name = "Joes hardware"; 
    Item s = new Item(); 
    s.id = "23254"; 
    s.name = "Martys collision"; 
    list.add(r); 
    list.add(s); 
    return ok(views.html.wheel.render(getJSONObject(list))); 
} 
 
public static JSONObject getJSONObject(List<Item> list){ 
    JSONObject jsonObject = new JSONObject(); 
    try{ 
        for (int i = 0; i < list.size(); i++) { 
        jsonObject.put(list.get(i).id, list.get(i).name); 
        } 
    }catch (JSONException e) { 
 
    } 
    return jsonObject; 
} 

在我的 Play 模板中,我接受 JSONObject 参数:

@(item : org.json.JSONObject) 
 
@import helper._ 
@import helper.twitterBootstrap._ 
@import play.api.libs.json.Json  

...

到目前为止,一切都很好。

直到我尝试在我的 javascript 中使用该对象:

如果我将我的对象 @item 放置在模板中除 javascript 之外的任何位置,我会得到以下结果: {"23254":"马蒂煎饼","23234":"乔斯的地方"}; 对我来说,这看起来像是一个正确形成的变量。

我将 JSONObject 插入到 JavaScript 中,如下所示:

<script type="text/javascript"> 
 
 businesses = @item; 

我希望翻译成这样:

businesses = { 
    "23332"  : "Joe's hardware", 
    "56755"  : "Marty's collision" 
}; 

然而该对象的行为却没有达到预期。我怀疑我没有以正确的方式将参数传递给 JavaScript。

谁能帮我解答一下吗?谢谢。

请您参考如下方法:

我找到了我自己问题的答案。结果变得相当简单。首先,你不需要搞乱 JSON。您将标准 Java 列表传递给 Play 模板。然后,您可以在 Javascript 变量大括号内迭代该列表。这是模板代码:

@(businesses: List[Business]) 
 
@import helper._ 
@import helper.twitterBootstrap._ 
 
... 
 
<script type="text/javascript"> 
 
places = { 
    @for((item, index) <- businesses.zipWithIndex) { 
                @if(index != businesses.size-1) { 
                "@item.id" : "@Html(item.name)",}  
                else {"@item.id" :      "@Html(item.name)"} 
     }               
 
}; 

我使用内置的 zipWithIndex 因为我需要用逗号分隔除最后一行之外的每一行。需要 @Html() 来转义 HTML 需要翻译的所有特殊字符。一旦 JavaScript 运行,你最终会得到你的变量:

places = { 
"345" : "Joe's Hardware", 
"564" : "Jan's Party Store" 
} 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!