我想创建自己的模板,可以将一个对象传递给该模板,并让Soy模板遍历该对象并提取键和值。

如果我在JavaScript中具有和对象并调用Soy模板:

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

如何获得['one', 'two', 'three']值?通常我会使用jQuery的each()函数,但是我不确定如何在Soy文件中执行类似的操作而不将对象转换为数组。

我正在使用的对象具有已知的形式(没有嵌套的对象,或者如果有,则提前知道它们并到达已知的深度)。欢迎对此问题或带有嵌套对象的一般对象的答案。
{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}

最佳答案

现在,您可以使用 keys() 函数获取它们。

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

09-16 12:18