2012-08-12 5 views
62

Ich bin neu bei Lenker.js und habe gerade angefangen, es zu verwenden. Die meisten Beispiele basieren auf der Iteration über ein Objekt. Ich wollte wissen, wie man Lenker in Basic-for-Loop verwendet.Iterating über grundlegende "for" -Schleife mit Lenker.js

Beispiel.

for(i=0 ; i<100 ; i++) { 
    create li's with i as the value 
} 

Wie kann dies erreicht werden?

Antwort

141

Es gibt nichts in Lenker, aber Sie können Ihre eigenen Helfer leicht genug hinzufügen.

Wenn Sie nur dann etwas n mal tun wollte:

Handlebars.registerHelper('times', function(n, block) { 
    var accum = ''; 
    for(var i = 0; i < n; ++i) 
     accum += block.fn(i); 
    return accum; 
}); 

und

{{#times 10}} 
    <span>{{this}}</span> 
{{/times}} 

Wenn Sie eine ganze for(;;) Schleife wollte, dann etwa so:

Handlebars.registerHelper('for', function(from, to, incr, block) { 
    var accum = ''; 
    for(var i = from; i < to; i += incr) 
     accum += block.fn(i); 
    return accum; 
}); 

und

{{#for 0 10 2}} 
    <span>{{this}}</span> 
{{/for}} 

Demo: http://jsfiddle.net/ambiguous/WNbrL/

+1

+1 für die Helfer benutzen konnten. Als Nebenbemerkung funktioniert das Verschachteln von for helper nicht in Szenarien, in denen Sie auf die ursprünglichen Daten zurückgreifen müssen. Daten: {Zeilen: 12, Spalten: 3}. – backdesk

+0

@ mu-is-too-short jede Hilfe hier? http://stackoverflow.com/questions/28865379/handlebar-helper-syntax-in-ember-cli – sheriffderek

+0

@sheriffderek Sorry, ich kenne die Ember oder Ember-CLI Seite der Dinge nicht. –

7

Wenn Sie wie Coffee

Handlebars.registerHelper "times", (n, block) -> 
    (block.fn(i) for i in [0...n]).join("") 

und

{{#times 10}} 
    <span>{{this}}</span> 
{{/times}} 
4

Dieser Ausschnitt kümmert sich auch Block in Fall nehmen n als dynamischer Wert kommt, und bieten @index optionale Kontextvariable, behält auch den äußeren Kontext der Ausführung.

/* 
* Repeat given markup with given times 
* provides @index for the repeated iteraction 
*/ 
Handlebars.registerHelper("repeat", function (times, opts) { 
    var out = ""; 
    var i; 
    var data = {}; 

    if (times) { 
     for (i = 0; i < times; i += 1) { 
      data.index = i; 
      out += opts.fn(this, { 
       data: data 
      }); 
     } 
    } else { 

     out = opts.inverse(this); 
    } 

    return out; 
}); 
+0

Ich mag diesen Ansatz besser, weil Sie die Variable @index zur Hand haben. Sie können auch andere Variablen hinzufügen, die von bestimmten Anforderungen abhängen. – ChrisRich

10

Top Antwort hier ist gut, wenn Sie das letzte Mal/erste/Index verwenden möchten, wenn Sie die folgenden

Handlebars.registerHelper('times', function(n, block) { 
    var accum = ''; 
    for(var i = 0; i < n; ++i) { 
     block.data.index = i; 
     block.data.first = i === 0; 
     block.data.last = i === (n - 1); 
     accum += block.fn(this); 
    } 
    return accum; 
}); 

und

{{#times 10}} 
    <span> {{@first}} {{@index}} {{@last}}</span> 
{{/times}} 
+0

Dieser Helper scheint nicht zu erlauben, @ ../index oder @ ../last zu verwenden, wenn er zu geschachtelten Verwendungen des Helpers kommt. Ist das richtig oder habe ich etwas falsch gemacht? – madtyn