2017-02-27 61 views
0

我想知道是否有可能在Spring MVC应用程序的控制器中创建一个Java对象,通过把手辅助方法传递到客户端。通Java对象Handlebars.js帮手

例如,如果在控制器我创建了一个地图,并把它传递给我的看法:

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“MyMap”。有没有办法传入实际的Map对象?

+0

将您的地图对象转换为javascript地图,然后将其传递给handlebar helper。 –

回答

0

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

在下面的例子中,你可以看到你如何通过键和值访问一组对象:

<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}}