2017-02-27 8 views
0

Spring MVCアプリケーションのコントローラで作成されたJavaオブジェクトを、Handlebarsヘルパーメソッドを介してクライアント側に渡すことができるかどうかは疑問です。例えば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 
      }); 

明らかにth実際に私のMapオブジェクトを渡すのではなく、文字列 "MyMap"を渡したので動作しません。実際のMapオブジェクトを渡す方法はありますか?

+0

マップオブジェクトをビューでjavascriptマップに変換し、ハンドルバーヘルパーに渡します。 –

答えて

0

マップ全体を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> 

、あなたはそれで地図にアクセスする方法を見ることができます確かに非常に便利であるキー値、:だからあなたの質問への答えはYES、あなたが最も確かにあなたがやりたいことと自分のヘルパーメソッドへのパラメータとして全体のマップを渡すことができることを

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

です。

{{yourHelper example-map-object}} 
関連する問題