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 開発コミュニティへのリンクです。

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

現在、事前にキーがわからない場合は、オブジェクトを反復処理するためにオブジェクトを配列に変換する必要があります。

于 2010-11-13T20:11:25.043 に答える