2015-03-27 3 views
5

Ich habe diesen Code-Block in einer Spacebars Vorlage:Wie kann ich einen Block N mal in einer Meteor Spacebars Vorlage wiederholen?

1. 
<select class="form-group"> 
    {{#each choices}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 

Ich möchte diese N-mal wiederholen, um die Anzahl jedes Mal, wie so erhöht wird:

1. 
<select class="form-group"> 
    {{#each choices}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 
2. 
<select class="form-group"> 
    {{#each choices}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 
3. 
<select class="form-group"> 
    {{#each choices}} 
    <option>{{this}}</option> 
    {{/each}} 
</select> 

ich in der Lage sein würde gerne übergeben Sie N an ein benutzerdefiniertes Schablonen-Tag, um dies zu berücksichtigen (z. B. {{choices 3}}). Was ist ein schöner trockener Weg, dies zu tun? Ich habe eine vage Vorstellung, dass ich einen Template-Helfer schreiben könnte, aber ich bin mir nicht sicher, wo ich anfangen soll.

Antwort

7

Arbeitsbeispiel: http://meteorpad.com/pad/THAQfpfrru5MgAGnS/Copy%20of%20Leaderboard

Sie eine Zählung in und ein Array von beliebigen Objekten passieren kann. Nicht das eleganteste ... aber es hat funktioniert!

HTML

<body> 
    {{>content}} 
</body> 

<template name="content"> 
    {{#each loopCount 5}} 
     <select class="form-group"> 
     {{#each choices}} 
      <option>{{this}}</option> 
     {{/each}} 
     </select> 
    {{/each}} 
</template> 

JS

Template.content.helpers({ 

    choices: function(){ 
    return ['choice1','choice2','choice3'] 
    }, 

    loopCount: function(count){ 
    var countArr = []; 
    for (var i=0; i<count; i++){ 
     countArr.push({}); 
    } 
    return countArr; 
    } 

}); 
+0

Awesome! Das funktioniert großartig. Ich fügte dem Objektarray eine Zahl hinzu und benutzte sie innerhalb des Blocks, um die Nummerierung anzuzeigen, die ich wollte: http://meteorpad.com/pad/rbyBzy4FzBtZauK8m/Repeat%20template%20block – raddevon

+0

Gerade realisiert, als ich diesen Kommentar einreichte, den ich wahrscheinlich könnte leg sie einfach in eine geordnete Liste. – raddevon

0

Wenn Sie den Unterstrich-Paket für Meteor verwenden, und auch passieren, Coffeescript zu verwenden, können Sie die folgenden Ein- erstellen Linienschablonenhelfer:

t.helpers 
    loop: (count) -> {} for i in _.range count 

Sie können dann diese Helfer in Ihrer Vorlage verwenden:

{{! Will display 'Output' 5 times }} 
{{#each loop 5}} 
    Output 
{{/each}} 
+0

Wäre toll, dieses Beispiel auch in plain JS geschrieben zu haben – Jirik

Verwandte Themen