2012-10-03 2 views
5

C'è un modo per ottenere l'oggetto dell'iterazione corrente nel Manubrio?
codice:
Come fare riferimento a Object dell'iterazione corrente nel Manubrio

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

ho accennato processObject({{.}}) Questo non è corretto. È lì che ho bisogno di una sostituzione/soluzione. Spero che tu prenda quello che sto cercando di dire.
Il contenuto di objArr potrebbe essere simile

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

modello di codice compilazione è:

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

Se ho potuto ottenere il riferimento all'oggetto, quindi È così facile per elaborare i dati. Piuttosto che passare un campo alla funzione e cercare nell'intero array per ottenere l'oggetto richiesto e quindi elaborarlo.
I Preferire una soluzione senza un helper di blocco personalizzato/helper di espressioni personalizzate ma se non esiste, preferirei utilizzare un helper di blocco personalizzato. Qualsiasi soluzione senza la ricerca nell'intero array è la benvenuta!

+0

totalmente d'accordo con questo - un "datacontext" di sorta sarebbe molto utile –

risposta

0

vorrei suggerire un percorso diverso. Sapendo che si dispone già di un riferimento a objArr, fare una punta variabile globale o il nome distanziati ad esso. Ad esempio: window.objArr = objArr;

Crea il tuo gestore di clic che fa tutto quello che vuoi: funzione processObject (tasto) { }

chiamata che con la chiave all'interno del vostro modello:

< 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> 

Altre alternative: Handler clienti.

Altre alternative: Se non è possibile creare un riferimento a objArray, si potrebbe possibile memorizzare le proprietà dell'oggetto all'interno di data-attributi se si sta utilizzando HTML5. processObject potrebbe quindi recuperarli.