2012-10-03 14 views
5

Handlebarsの現在の反復のオブジェクトを取得する方法はありますか?
コード:私は間違っていprocessObject({{.}})を言及した
Handlebarsの現在の反復のオブジェクト

<script id="HandleBarTemplate1" type="text/x-handlebars-template"> 
{{#each objArr}} 
<img src="{{objField1}}"/> 
<strong>Name:</strong> {{objField2}} 
<input type="button" onclick="processObject({{.}});"/> 
{{/each}} 
</script> 

。それは私が交換/ソリューションが必要なところです。あなたが私が努力しているものを得ることを願っています。

var objArr = [{objField1:"smith.jpg",objField2:"Smith"},{objField1:"jane.jpg",objField2:"Jane"},...] 

テンプレートコンパイルコードがあるようobjArr
内容が見えるかもしれません:

var source = document.getElementById("HandleBarTemplate1").innerHTML; 
var compiledTemplate = Handlebars.compile(source); 
var html = compiledTemplate({objArr:objArr}); 

私はオブジェクトへの参照を取得することができれば、データを処理するためにとても簡単です。関数にフィールドを渡し、配列全体を検索して必要なオブジェクトを取得してから処理するのではなく、
私は、カスタムブロックヘルパー/カスタム式ヘルパーを使用しないで、のソリューションを推奨しますが、存在しない場合はカスタムブロックヘルパーを使用します。配列全体を検索せずに解決できるソリューションは大歓迎です!

+0

はこれに完全に同意します - 並べ替えの "datacontext"は非常に役に立ちます –

答えて

0

私は別のルートを提案します。 すでにobjArrへの参照があることを知っているので、それを指すグローバル変数または名前空間変数を作成してください。 例:window.objArr = objArr;

あなたが望むものは何でもないあなたのクリックハンドラを作成します。 機能、テンプレート内のあなたの鍵を持つことprocessObject(キー){ }

コール:

< script id="HandleBarTemplate1" type="text/x-handlebars-template"> 

    {{#each objArr}} 

     <img src="{{objField1}}"/> 

     <strong>Name:</strong> {{objField2}} 

     <input type="button" onclick="processObject({{objField2}});"/> 

    {{/each}} 

</script> 

他の代替: カスタマー・ハンドラを。

その他の代替方法: objArrayへの参照を作成できない場合は、html5を使用している場合は、データ属性内にオブジェクトのプロパティを格納できます。 processObjectはそれらを取得できます。

関連する問題