使用Google闭包模板时,如何在Soy文件中迭代对象?

时间:2010-11-08 02:46:02

标签: javascript google-closure

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

2 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:1)

从外观上看,目前还没有,但将来会有。以下是Google Development社区讨论计划的链接。

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

目前,如果您不提前知道密钥,则需要将对象转换为数组以便迭代它。