2011-07-06 40 views
3

我剛剛開始做一些工作與谷歌封閉,我想選擇字段創建移動到其自己的模板,並調用這個模板的東西,如:是否可以在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屬性的邏輯。不幸的是,我得到'不是所有的代碼都是大豆V2語法(找到標籤{{參數選項:[{name:...'exception。

我假設我可以使用通過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> 

這也是單調乏味的,但至少數據是在一個地方

有更好的方法嗎?

回答

4

截至Sept 19, 2011 release, Closure Templates provides support for list and map literals。不幸的是,在發行版中有一個列表和地圖字面值的小錯誤,它是partially fixed in plovr,但官方的修復應該會很快出現,一旦它可用,它將被整合到plovr中。

+0

是的,我很高興看到在plovr郵件列表中提到的那些 - 我期待在下一個版本中獲得我的雙手(稍微令人討厭的是,他們在發佈9月版plovr之前等了幾天,然後才提供給我們這些新的閃亮的好東西),你有什麼想法下一個版本將是什麼時候? – Cebjyre

+0

如果您不在Windows上,可以通過http://code.google.com/p/plovr/downloads/detail?name=plovr-d6db24beeb7f.jar 獲得支持文字的plovr,否則您需要等待直到http://code.google.com/p/plovr/issues/detail?id=51固定。各種各樣的人已經提交了bug的補丁,所以我只需要以最簡潔的方式整合它,事情應該再次確定。 – bolinfest

3

不幸的是,不,封閉模板不支持文字列表或地圖值,儘管您可能能夠利用plovr來解決您的問題(請參閱下文)。在大豆模板中構建數值方面,您受限於Closure Templates文檔的Expressions部分中可以表達的內容。

不幸的是,它聽起來好像地圖和列表文字在優先級列表according to the maintainer of Closure Templates, Kai Huang上足夠高。

但如果你使用的是plovr,那麼你可能希望利用soy-function-plugins選項,這使得它能夠使用org.plovr.soy.function.PlovrModule功能插件時,通過自定義使用列表list()功能。 Javadoc for ListFunction顯示瞭如何在閉合模板中使用list()函數的示例。

請注意,如果要使用plovr外部的list()函數插件,則必須使用ListFunction.javafunction plugins as described in the Closure Templates documentation

+0

乾杯,是的,我使用plovr。我能夠通過兩個並行列表得到我需要的內容,但是我無法制作包含對象的單個列表 - 我做錯了什麼,或者目前只是不支持? – Cebjyre

+0

對不起,目前,我認爲'list()'只能使用其他有效的Closure Templates表達式,所以如果你試圖提供一個map/object作爲'list()'的參數,那麼這是行不通的。 – bolinfest

相關問題