2012-10-31 47 views
0

可能重複:
Custom for-loop helper for EmberJS/HandlebarsJS如何用EmberJs/Handlebars製作一個for(i = 0; i <n; i ++)?

我用Handlebars的一個網站,我有一個重要的問題:

有時候,你給你的模板全陣列只是想和你顯示第一個元素... 你怎麼用把手做到這一點?我找不到......

+0

我們不能從http://handlebarsjs.com/使用簡單的迭代器例子block_helpers.html,因爲我使用了一個稍後填充的ArrayController,當這個函數改變時這個函數不會更新。 – stadja

回答

0

這裏是我是如何做到的(和它的作品!)

首先, 我在我的模型中的「預覽」屬性/功能,只是返回arrayController陣列中的:

objectToLoop = Ember.Object.extend({ 
     ... 
    arrayController: [], 
    preview: function() { 
     return this.get('arrayController').toArray(); 
    }.property('[email protected]'), 
     ... 
}); 

然後,我添加了一個新的把手幫手:

Handlebars.registerHelper("for", function forLoop(arrayToLoop, options) { 
    var data = Ember.Handlebars.get(this, arrayToLoop, options.fn); 

    if (data.length == 0) { 
     return 'Chargement...'; 
    } 

    filtered = data.slice(options.hash.start || 0, options.hash.end || data.length); 

    var ret = ""; 
    for(var i=0; i< filtered.length; i++) { 
     ret = ret + options.fn(filtered[i]); 
    } 
    return ret;  
}); 

並感謝所有這個魔法,然後我就可以把它在我的觀點:

<script type="text/x-handlebars"> 
    <ul> 
     {{#bind objectToLoop.preview}} 
      {{#for this end=4}} 
       <li>{{{someProperty}}}</li> 
      {{/for}} 
     {{/bind}} 
    </ul> 
</script> 

就是這樣。

我知道這是不是最優的,那麼誰對如何改進它的想法,請讓我知道:)

相關問題