【问题标题】:Pass Java object to Handlebars.js helper将 Java 对象传递给 Handlebars.js 助手
【发布时间】:2017-02-27 17:59:43
【问题描述】:

我想知道是否可以通过 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 对象,而是一个字符串“MyMap”。有没有办法传入实际的 Map 对象?

【问题讨论】:

  • 在视图中将您的地图对象转换为 javascript 地图,然后将其传递给车把助手。

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


【解决方案1】:

您可以将整个 Map 传递到您的 HTML 中,然后迭代并使用您的帮助程序 (aCustomHelper)。 '@key' 关键字是指地图的键,而'this' 关键字是指地图的值(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}}

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 2015-08-03
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多