将Java对象传递给Handlebars.js帮助程序

时间:2017-02-27 17:59:43

标签: javascript java spring-mvc templates handlebars.js

我想知道是否可以通过Handlebars帮助程序方法将在Spring MVC应用程序的控制器中创建的Java对象传递给客户端。

例如,如果在控制器中我创建了一个地图并将其传递给我的视图:

    public ModelAndView myController(HttpServletRequest req) {
        ModelAndView mav = new ModelAndView("/views/myview.jsp");

        Map<Long, String> map = new HashMap<>();
        map.put(1L, "a");
        map.put(2L, "b");

        mav.addObject("MyMap", map);

        return mav;
    }

......我的观点是这样的:

<html>
    <head>
    </head>

    <body>
        <!-- I want to pass my map to this helper function -->
        <div id="mymap">{{buildStringFromMap "MyMap"}}</div>
    </body>
</html>

然后在Javascript中使用实际的Handlebars助手来执行该地图的操作,如下所示:

            Handlebars.registerHelper('buildStringFromMap', function (myMap) {
                var a = myMap[1L]; // a == "a" here
               // do whatever with the map
            });

显然这不起作用,因为我没有实际传递我的Map对象,而是一个String&#34; MyMap&#34;。有没有办法传入实际的Map对象?

1 个答案:

答案 0 :(得分:0)

您可以将整个Map传递到HTML中,然后迭代并使用您的助手(aCustomHelper)。 &#39; @键&#39;关键字是指地图的关键字,而这个&#39; keyword是指map的值(example-map-object)。

{{#each example-map-object}}
    <tr>
        <td>{{{this}}}</td>
        <td>{{{@key}}}</td>
        <td>{{{aCustomHelper @key this}}}</td>
    </tr>
{{/each}}

在下面的示例中,您可以看到如何按键和值访问Set对象:

<select>
    {{#each example-set-object}}
          <option value="{{@value}}">{{@key}}</option>
    {{/each}}
</select>

在下面的示例中,您可以看到如何通过它的关键值访问Map,这非常方便:

{{#each example-map-object}}
    <tr>
        <td>{{{this.id}}}</td>
        <td>{{{this.customerName}}}</td>
        <td>{{{this.date}}}</td>
    </tr>
{{/each}}

所以问题的答案是肯定的,你可以做你想做的事情并将整个地图作为参数传递给你的助手方法。

{{yourHelper example-map-object}}