Как перебрать объект в файле Soy при использовании шаблонов закрытия Google? - PullRequest
13 голосов
/ 08 ноября 2010

Я хочу создать свой собственный шаблон, в который я могу передать объект, и сделать так, чтобы шаблон Soy перебирал объект и извлекал ключи и значения.

Если у меня есть и объект в JavaScript и вызовшаблон сои:

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

Как мне получить значения ['one', 'two', 'three']?Обычно я использовал бы функцию jQuery each(), но я не уверен, как сделать что-то подобное в файлах сои без преобразования объекта в массив.

Используемые мной объекты имеют известную форму (нет вложенныхобъекты или, если они есть, они известны заранее и уходят на известную глубину).Ответы для этого или общего случая объекта с вложенными объектами приветствуются.

{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 ]

21 голосов
/ 27 июня 2013

Теперь вы можете получить их с помощью функции keys().

{foreach $key in keys($paramValue)}
  key:   {$key}
  value: {$paramValue[$key]}
{/foreach} 
1 голос
/ 13 ноября 2010

Судя по всему, в настоящее время это недоступно, но будет в будущем.Вот ссылка на сообщество разработчиков Google, где обсуждаются планы на это.

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

В настоящее время вам необходимо преобразовать ваш объект в массив, чтобы выполнить итерацию по нему, если вы этого не сделаетезнать ключи заранее.

...