我刚刚开始使用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:...'exception。
我假设我可以使用将参数参数传递给调用模板的解决方法,但是我需要确保覆盖进入模板的所有方法,这将变得非常繁琐。 / p>
目前我认为我必须选择
<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>
这也很乏味,但至少数据只在一个地方。
有更好的方法吗?
答案 0 :(得分:4)
截至Sept 19, 2011 release, Closure Templates provides support for list and map literals。遗憾的是,发布版本中有一个列表和地图文字的小错误,partially fixed in plovr,但很快就会出现官方修复,一旦可用,它将被整合到plovr中。
答案 1 :(得分:3)
不幸的是,不,Closure模板不支持文字列表或地图值,但您可以利用plovr来解决您的问题(见下文)。就在Soy模板中构造值而言,您受限于可以在Closure Templates文档的Expressions部分中表达的内容。
可悲的是,听起来好像地图和列表文字在优先级列表according to the maintainer of Closure Templates, Kai Huang上足够高。
虽然如果你使用的是plovr,那么你可能想要利用soy-function-plugins
选项,这样当list()
函数插件是org.plovr.soy.function.PlovrModule
时,可以通过自定义list()
函数使用列表。用过的。 Javadoc for ListFunction
显示了如何在闭包模板中使用list()
函数的示例。
请注意,如果您想在plovr之外使用ListFunction.java
函数插件,则必须将{{1}}与function plugins as described in the Closure Templates documentation一起使用。