我想知道是否可以通过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对象?
答案 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}}