16

我想创建自己的模板,我可以将对象传递给它,并让 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}
4

2 回答 2

27

您现在可以使用该keys()功能获取它们。

{foreach $key in keys($paramValue)}
  key:   {$key}
  value: {$paramValue[$key]}
{/foreach} 
于 2013-06-27T02:22:15.587 回答
1

从外观上看,这目前不可用,但将来会。这是 Google Development 社区讨论计划的链接。

http://groups.google.com/group/closure-templates-discuss/browse_thread/thread/a65179c527580aab

目前,如果您事先不知道键,则需要将对象转换为数组以便对其进行迭代。

于 2010-11-13T20:11:25.043 回答