Можно ли создавать объекты в шаблонах Closure? - PullRequest
3 голосов
/ 06 июля 2011

Я только начал работать с 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: [{name: ... 'исключение].

* Полагаю, я мог бы использовать обходные пути при наличии опций).параметр передается в вызывающий шаблон, но тогда мне нужно убедиться, что все способы попадания в шаблон покрыты, что будет очень утомительно.

В данный момент я думаю, что мне нужно идтис

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

, что также утомительно, но, по крайней мере, данные находятся в одном месте.

Есть ли лучший способ?

Ответы [ 2 ]

4 голосов
/ 10 октября 2011

Начиная с выпуска 19 сентября 2011 г. шаблоны закрытия обеспечивают поддержку литералов списков и карт .К сожалению, в выпуске есть небольшая ошибка с литералами list и map, которая частично исправлена ​​в plovr , но скоро должно появиться официальное исправление, которое будет интегрировано в plovr, как только оно станет доступным.

3 голосов
/ 06 июля 2011

К сожалению, нет, шаблоны закрытия не поддерживают буквальный список или значения карт, хотя вы можете использовать plovr для решения вашей проблемы (см. Ниже). С точки зрения построения значений в шаблоне Soy вы ограничены тем, что может быть выражено в разделе Выражения документации шаблонов закрытия.

К сожалению, это не звучит так, как будто литералы карт и списков находятся достаточно высоко в списке приоритетов в соответствии с сопровождающим шаблонов закрытия, Кай Хуан .

Хотя, если вы используете plovr, вы можете использовать опцию soy-function-plugins, которая позволяет использовать списки через пользовательскую функцию list(), когда подключаемый модуль функции org.plovr.soy.function.PlovrModule используемый. Javadoc для ListFunction показывает пример использования функции list() в шаблоне замыкания.

Обратите внимание, что если вы хотите использовать функциональный плагин list() вне plovr, то вы должны использовать ListFunction.java с функциональными плагинами , как описано в документации по шаблонам закрытия .

...