Можно ли создавать объекты в шаблонах Closure?

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

Я предполагаю, что мог бы использовать обходной путь передачи параметра 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>

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам