2012-10-03 10 views
5

¿Hay alguna forma de obtener el objeto de la iteración actual en manubrios?
código:
Cómo hacer referencia al objeto de iteración actual en manubrios

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

he mencionado processObject({{.}}) Eso es incorrecto. Ahí es donde necesito un reemplazo/solución. Espero que obtengas lo que estoy tratando de decir.
El contenido de objArr puede tener un aspecto como

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

Plantilla código de compilación es:

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

Si pudiera conseguir la referencia al objeto, entonces es tan fácil de procesar los datos. En lugar de pasar un campo a la función y buscar en toda la matriz para obtener el objeto requerido y luego procesarlo.
Prefiero una solución sin un ayudante de bloque personalizado/asistente de expresión personalizada pero si no existe, prefiero un asistente de bloque personalizado. ¡Cualquier solución sin buscar en toda la matriz es bienvenida!

+0

totalmente de acuerdo con esto - un "datacontext" de clases sería muy útil –

Respuesta

0

Sugeriría una ruta diferente. Sabiendo que ya tiene una referencia a objArr, establezca una variable global o espaciada por nombre que lo apunte. Por ejemplo: window.objArr = objArr;

Crear su controlador de clic que haga lo que quiera: función processObject (clave) { }

llamada que con su clave dentro de su plantilla:

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

Otras alternativas: Handler cliente.

Otras alternativas: Si no puede crear una referencia a objArray, podría almacenar las propiedades del objeto dentro de data-attributes si está utilizando html5. processObject podría entonces recuperarlos.

Cuestiones relacionadas