繁体   English   中英

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

[英]Pass Java object to Handlebars.js helper

我想知道是否有可能通过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对象?

您可以将整个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>

在下面的示例中,您可以看到如何通过键值访问地图,这确实非常方便:

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

因此,对您的问题的回答是,是的,您当然可以做您想做的事情,并将整个地图作为参数传递给您的辅助方法。

{{yourHelper example-map-object}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM