我想创建自己的模板,我可以将对象传递给它,并让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}
答案 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
目前,如果您不提前知道密钥,则需要将对象转换为数组以便迭代它。