2012-10-03 14 views
5

Czy istnieje sposób na uzyskanie obiektu aktualnej iteracji w Handlebars?
Kod:
Jak odnosić się do obiektu bieżącej iteracji w kierownicy

<script id="HandleBarTemplate1" type="text/x-handlebars-template"> 
{{#each objArr}} 
<img src="{{objField1}}"/> 
<strong>Name:</strong> {{objField2}} 
<input type="button" onclick="processObject({{.}});"/> 
{{/each}} 
</script> 

wspominałem processObject({{.}}) który jest nieprawidłowy. Tam potrzebuję wymiany/rozwiązania. Mam nadzieję, że otrzymasz to, co próbuję powiedzieć.
Zawartość objArr może wyglądać

var objArr = [{objField1:"smith.jpg",objField2:"Smith"},{objField1:"jane.jpg",objField2:"Jane"},...] 

Szablon kod kompilacji:

var source = document.getElementById("HandleBarTemplate1").innerHTML; 
var compiledTemplate = Handlebars.compile(source); 
var html = compiledTemplate({objArr:objArr}); 

Gdybym mógł uzyskać odniesienie do obiektu, to jest to tak łatwe do przetwarzania danych. Zamiast przekazywać pole do funkcji i przeszukiwać całą tablicę, aby uzyskać wymagany obiekt, a następnie go przetworzyć.
Wolę rozwiązanie bez niestandardowego pomocnika bloku/niestandardowego wyrażenia pomocnika, ale jeśli nie istnieje, wolałbym wybrać niestandardowego pomocnika blokowego. Każde rozwiązanie bez przeszukiwania całej tablicy jest mile widziane!

+0

całkowicie zgadzam się z tym - rodzaj "datakontekstu" byłby bardzo pomocny –

Odpowiedz

0

Proponuję inną trasę. Wiedząc, że masz już odniesienie do obiektu objArr, ustaw zmienną globalną lub zmienną w nazwie. Na przykład: window.objArr = objArr;

Utwórz kliknij obsługi, że ma cokolwiek chcesz: funkcji processObject (key) { }

połączenia, które z kluczem wewnątrz szablonu:

< script id="HandleBarTemplate1" type="text/x-handlebars-template"> 

    {{#each objArr}} 

     <img src="{{objField1}}"/> 

     <strong>Name:</strong> {{objField2}} 

     <input type="button" onclick="processObject({{objField2}});"/> 

    {{/each}} 

</script> 

inne alternatywy: Handler klienta.

Inne alternatywy: Jeśli nie możesz utworzyć odwołania do obiektu objArray, możesz przechowywać właściwości obiektu w atrybutach danych, jeśli używasz html5. processObject może następnie je odzyskać.

Powiązane problemy