2010-11-08 4 views
12

Quiero crear mi propia plantilla a la que puedo pasarle un objeto, y hacer que la plantilla de Soy itere a través del objeto y saque las claves y los valores.¿Cómo puedo iterar sobre un objeto dentro de un archivo Soy al usar plantillas de cierre de Google?

Si tengo y el objeto en JavaScript y llamar a una plantilla de soja:

var obj = {'one':'a', 'two':b, 'three':c}; 
nameSpace.templateName({'paramValue': obj}); 

¿Cómo consigo los ['one', 'two', 'three'] valores? Por lo general, utilizaría la función each() de jQuery, pero no estoy seguro de cómo hacer algo similar en los archivos de Soy sin convertir el objeto a una matriz.

Los objetos que estoy usando tienen forma conocida (no hay objetos anidados, o si los hay, se conocen con anticipación y van a la profundidad conocida). Las respuestas para este o el caso general del objeto con objetos anidados son bienvenidas.

{namespace nameSpace} 

/** 
* Prints keys and values of the object 
* @param paramValue object with keys and values 
*/ 
{template .templateName} 
    {$paramValue[0]} // undefined 
    {$paramValue.Keys} // undefined 
    {$paramValue.keys} // undefined 
    {$paramValue.one} // prints 'a' 
    {foreach $val in $paramValue} 
     // never reached 
    {/foreach} 
{/template} 

Respuesta

20

Ahora puede obtenerlos con la función keys().

{foreach $key in keys($paramValue)} 
    key: {$key} 
    value: {$paramValue[$key]} 
{/foreach} 
+1

Esta es definitivamente la respuesta correcta a día de hoy. Consulte la documentación: https://developers.google.com/closure/templates/docs/functions_and_directives –

+1

keys() no respeta el orden original de las teclas (se indica en la documentación). Semánticamente eso no es un problema, pero en la práctica, es posible que deba ser consciente de eso. –

Cuestiones relacionadas