Можно ли создавать объекты в шаблонах 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
с функциональными плагинами, как описано в документации шаблонов закрытия.