Ответ 1
Теперь вы можете получить их с помощью функции keys()
.
{foreach $key in keys($paramValue)}
key: {$key}
value: {$paramValue[$key]}
{/foreach}
Я хочу создать свой собственный шаблон, с которым я могу передать объект, и попросить шаблон сои пройти через объект и вытащить ключи и значения.
Если у меня есть и объект в JavaScript и вызывается шаблон сои:
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}
По мнению вещей, в настоящее время это невозможно, но это будет в будущем. Вот ссылка на сообщество разработчиков Google, в котором обсуждаются его планы.
http://groups.google.com/group/closure-templates-discuss/browse_thread/thread/a65179c527580aab
В настоящее время вам нужно преобразовать свой объект в массив, чтобы перебрать его, если вы заранее не знаете ключей.