3

Google Closure を使った作業を始めたばかりで、選択フィールドの作成を独自のテンプレートに移動し、そのテンプレートを次のように呼び出したいと思います。

{call templates.utils.select}
  {param name: 'state'/}
  {param value: $selected_state /}
  {{param options: [
    {name: 'Australian Capital Territory', value: 'ACT'},
    {name: 'New South Wales', value: 'NSW'},
    {name: 'Northern Territory', value: 'NT'},
    {name: 'Queensland', value: 'QLD'},
    {name: 'South Australia', value: 'SA'},
    {name: 'Tasmania', value: 'TAS'},
    {name: 'Victoria', value: 'VIC'},
    {name: 'Western Australia', value: 'WA'}
  ]/}}
{/call}

templates.utils.selectテンプレートには、正しいオプションのプロパティを設定するロジックがありますselected。残念ながら、「すべてのコードが Soy V2 構文であるとは限りません (タグ {{param オプション: [ {名前: ... が見つかりました)」という例外が発生します。

options パラメーターを呼び出し元のテンプレートに渡すという回避策を使用できると思いますが、その場合、テンプレートに入るすべての方法がカバーされていることを確認する必要があり、非常に面倒です。

現時点では、私は一緒に行かなければならないと思います

<select name="state">
  <option value="ACT" {if $selected_state=='ACT'}selected="selected"{/if}>Australian Capital Territory'</option>
  <option value="NSW" {if $selected_state='NSW'}selected="selected"{/if}>New South Wales</option>
  ...
</select>

これも面倒ですが、少なくともデータは 1 か所にあります。

より良い方法はありますか?

4

2 に答える 2

4

2011 年 9 月 19 日のリリースの時点で、Closure Templates はリストとマップのリテラルをサポートしています。残念ながら、このリリースにはリストとマップのリテラルに関する小さなバグがあり、これはplovrで部分的に修正されていますが、正式な修正が近日中に行われる予定で、利用可能になり次第 plovr に統合される予定です。

于 2011-10-10T17:40:11.940 に答える
3

残念ながら、いいえ。クロージャテンプレートはリテラルリストまたはマップ値をサポートしていませんが、plovrを利用して問題を解決できる場合があります(以下を参照)。Soyテンプレート内で値を作成するという点では、ClosureTemplatesドキュメントのExpressionsセクションで表現できるものによって制限されます。

残念ながら、クロージャテンプレートのメンテナであるKai Huangによると、マップとリストのリテラルが優先順位リストで十分に高いようには聞こえません。

ただし、plovrを使用している場合は、このオプションを利用することをお勧めします。これにより、関数プラグインを使用するときにsoy-function-pluginsカスタムlist()関数を介してリストを使用できるようになります。org.plovr.soy.function.PlovrModuleJavadocListFunctionlist()は、クロージャテンプレートで関数を使用する方法の例を示しています。

list()plovrの外部で関数プラグインを使用する場合は、クロージャーテンプレートのドキュメントで説明されているように関数プラグインでListFunction.java使用する必要があることに注意してください。

于 2011-07-06T04:35:34.880 に答える