2013-05-28 16 views
20

Ich habe einen Helfer namens printArray, die nur jedes Element in einem Array druckt. Es funktioniert großartig, wenn ich das Array in JS definiere und es über ein Kontextobjekt an den Helfer weitergebe. Was ich tun möchte, ist das Array direkt in der Vorlage zu definieren, wie:Pass-Array in Vorlage zu Meteor/Lenker Helfer geschrieben

{{printArray arr=[1, 3, 4] }} 

Leider durch die Zeit, dies zu meinem Helfer bekommt, die arr wichtige Punkte zu undefined. Gibt es eine gültige Syntax, um das Array in meinem Helfer zu erhalten, ohne es in Javascript zu definieren?

Antwort

2

Sie müssen einen anderen Helfer verwenden, die

Template.ArrayDemo.helpers({ 
    arrayValues: [1, 2, 3], 
    printArray: function(arr) { 
     for (i = 0; i < arr.length; i++) { 
      console.log(arr[i]); 
     } 
    } 
}); 

jetzt ein Array zurückgibt können Sie

{{printArray arr=arrayValues}}

1

Haben Sie versucht, nur den eingeschlossenen Wert des Arrays zu übergeben?

{{printArray [1, 3, 4]}} 

Ich weiß, dass Sie leicht in Objekte, die als Argumente an den Lenker Hilfsmethoden passieren kann:

{{printArray {arr: [1, 3, 4]} }} 

Werfen Sie einen Blick auf diese fantastischen Hilfsmethoden, von denen die meisten stahl ich von woanders, ein paar mein Referenzausgangspunkt auf dem Thema von denen ich schrieb oder gezwickt ... Sie sind:

https://github.com/zeroasterisk/Presenteract/blob/master/client/lib/handlebar-helpers.js

+2

Diese sehen super aus, aber ich muss etwas Missverständnis - ich 'Expecting 'ZU', 'DATA', 'STRING', 'integer', 'BOOLEAN', 'ID', 'September' erwartet, "INVALID" auf der ersten geschweiften Klammer des Objekts. Könnte diese Syntax in einfachen Lenkstangen erlaubt sein, aber in Meteor nicht erlaubt? –

+0

Danke für den Link zu Ihrem Code. Können Sie darauf hinweisen, wo Sie diese Helfer benutzen? –

+0

Hier ist ein Beispiel für "getSession" https://github.com/zeroasterisk/Presenteract/blob/master/client/views/about.html#L68 – zeroasterisk

6

Sie JavaScripts können arguments Array, um so etwas zu erreichen. Das arguments Array gibt Ihnen Zugriff auf alle Werte, die an die Funktion übergeben werden, wenn sie aufgerufen wird.

Dies ermöglicht es Ihnen Syntax wie folgt zu verwenden:

{{printArray 1 3 4}} 

Der Code sieht wie folgt aus:

Handlebars.registerHelper('printArray', function() { 
    //Last argument is the options object. 
    var options = arguments[arguments.length - 1]; 

    //Skip the last argument. 
    for(var i = 0; i < arguments.length - 1; ++i) { 
     //Do your thing with each array element. 
    } 

    //Return your results... 
    return ''; 
}); 
2

Sie können dies fast erreichen mit dem Einsatz von eval(), einen Helfer wie folgt aus :

Handlebars.registerHelper('printArray', function(values) { 
    var array = eval(values); 

    if (array.constructor === Array()) { 
    ... 
    } 
} 

Die oben genannten können Sie dies aus der Vorlage aufrufen:

{{printArray '[0, 1, 2]'}} 

Der einzige Nachteil dieser Methode ist, dass Sie Ihr Array als Zeichenfolge übergeben müssen.

1

Sie tun, wie unten, um ein Array Helfer definieren können.

Handlebars.registerHelper('array', function() { 
    return Array.prototype.slice.call(arguments, 0, -1); 
} 

{{printArray (array 1 3 4)}}