2017-02-27 19 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}}