2013-05-28 10 views
20

Mam pomocnika o nazwie printArray, który właśnie drukuje każdy element w tablicy. Działa świetnie, gdy definiuję tablicę w JS i przekazuję ją do helpera za pośrednictwem obiektu kontekstowego. Co chcę zrobić, to określić tablicę w samym szablonie, jak:Przełóż tablicę zapisaną w szablonie do pomocnika meteorytu/kierownicy

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

Niestety, przez czas ten dostaje się do mojego pomocnika, z arr kluczowych punktów do undefined. Czy istnieje jakaś poprawna składnia, aby uzyskać tablicę wewnątrz mojego helpera bez definiowania jej w javascript?

Odpowiedz

2

trzeba użyć innego pomocnika, która zwraca tablicę

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

teraz można zrobić

{{printArray arr=arrayValues}}

1

Czy próbowałeś przekazać tylko wartość w nawiasach tablicy?

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

wiem, można łatwo przejść w obiektach, jako argumenty do metod kierownica pomocniczych:

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

spojrzeć na te niesamowite metod pomocniczych, z których większość Wygrałem z zewnątrz, kilka których pisałem lub manipulowane ... oni są moim punktem wyjścia odniesienie na ten temat:

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

+2

Te wyglądają super, ale musi być nieporozumienie coś - mam 'Expecting 'Zamknij', 'dane', 'string', 'INTEGER', 'Boolean', 'id', 'SEP, dostał "INVALID" na początkowym nawiasie klamrowym obiektu. Czy ta składnia może być dozwolona w zwykłych kierownicach, ale zabroniona w meteodzie? –

+0

Dzięki za link do Twojego kodu. Czy możesz wskazać, gdzie używasz tych pomocników? –

+0

Oto przykład 'getSession' https://github.com/zeroasterisk/Presenteract/blob/master/client/views/about.html#L68 – zeroasterisk

6

można wykorzystać JavaScript na arguments array, aby osiągnąć coś takiego. Tablica arguments daje dostęp do każdej wartości przekazanej do funkcji po jej wywołaniu.

To pozwoli Ci używać składni tak:

{{printArray 1 3 4}} 

Kod wygląda następująco:

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

Można niemal tego dokonać przy użyciu eval() korzystając pomocnika takiego :

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

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

Powyższe umożliwia wywołanie tego z szablonu:

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

Jedynym zastrzeżeniem dla tej metody jest to, że musisz przekazać tablicę jako ciąg znaków.

1

Można zdefiniować pomocnika tablicy poniżej.

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

{{printArray (array 1 3 4)}} 
Powiązane problemy