2013-07-24 20 views
3

我目前使用Handlebars來動態填充一些面板。其中之一,我覺得需要重複一個給定的任務。如何使用Handlebars循環中的{{this}來訪問數組內容?

// Add a looping helper for Handlebars 
Handlebars.registerHelper('repeat', function(nFrom, nTo, oBlock) { 
    var sResult = ''; 
    for (var i=nFrom; i < nTo+1; i++) 
     sResult += oBlock.fn(i); 
    return sResult; 
}); 
{{#if oSomeObject}} 
<ul> 
    {{# repeat 1 2}} 
    <li>{{../oSomeObject.aSomeProperty[{{this}}]</li> <!-- Does not work (because of nested curlies) --> 
    <li>{{../oSomeObject.aSomeProperty[this]}}</li> <!-- Does not work --> 
    {{/repeat}} 
</ul> 
{{/if}} 

有我任何已知的方式我repeat塊內訪問我的數組的內容?

+1

我猜的東西替換你的'repeat'幫手,可以採取的'oSomeObject.aSomeProperty'數組作爲參數將是你的最好的選擇,基本上是一種通用的循環幫助器。 –

+0

我正在尋找一些更好的方式來做到這一點。但我想這樣做。謝謝,隨時寫下實際的答案。 –

回答

1

我會做這樣的:

Handlebars.registerHelper('myHelper', function(object, nFrom, nTo, oBlock){ 
    var sResult = ''; 
    for(var i=nFrom; i<nTo+1; i++) 
     sResult += oBlock.fn(object[i]); 
    return sResult; 
}); 

,或者,如果你想要遍歷雖然的所有oSomeObject

Handlebars.registerHelper('myHelper', function(object, oBlock){ 
    var sResult = ''; 
    for(var i=0; i<object.length; i++) 
     sResult += oBlock.fn(object[i]); 
    return sResult; 
}); 

那麼你就可以把它叫做:

{{#myHelper oSomeObject}} 
    <li>{{aSomeProperty}}</li> 
{{/myHelper}} 

這實際上與把手'each塊幫手,讓你可以只使用:

{{#each oSomeObject}} 
    <li>{{aSomeProperty}}</li> 
{{/each}} 

source