2012-10-03 41 views
5

有什麼方法可以在Handlebars中獲取當前迭代的對象?
代碼:
如何引用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> 

我所提到的processObject({{.}})這是不正確。這就是我需要更換/解決方案的地方。希望你得到我想要說的。
objArr的內容可能類似於

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

模板編譯代碼:

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,則可以將對象的屬性存儲在data-屬性中。 processObject可以檢索它們。