2010-09-22 28 views
3

比方說,我有一個選項一般,空中,地面加載取決於是否選擇一般的某些信息的組合框,和SEA的Grails:加載數據的一個組合框取決於另一個

<g:select name="group" from="${['GENERAL', 'AIR', 'GROUND', 'SEA']}" valueMessagePrefix="default.category" value="${tipoN}" /> 

然後另一個組合框,AIR,GROUND或SEA。

比方說GROUND有3個選項,FedEx, USPS, DHL,但AIR有完全不同的,AIRPLANE, JET, HOT AIR BALLOON

其他<g:select>的名稱應該是"commodity"

我想到了創建一個JavaScript文件,並處理一切就像HTML,但是我做了一些谷歌的研究,而不是像我想象的那樣簡單。

有誰知道什麼是最好的方法來做到這一點?提前致謝!

FG

回答

3

聽起來就像你會想爲此使用AJAX。你可以做到這一點的方法之一是使用的模板組合,和域對象:

// grails-app/domain/ShippingOption.groovy 

class ShippingOption = { 
    String method, // can be 'ground', 'sea', 'air', or 'general' 
      name // can be 'fedex', 'ups', etc. 

    def options = { 
     def meth = params.method ?: "general" 
     def comList = ShippingOption.findByMethod(meth) 
     render(template:"shippingList", model: [ commodityList: comList ]) 
    } 
} 

而且模板:

<!-- grails-app/views/_shippingList.gsp --> 
<g:each var="opt" in="${commodityList}"> 
    <option value="${opt.name}">${opt.name}</option> 
</g:each> 

而且在與它的選擇框您的GSP:

<!-- ... other stuff is before here ... --> 
<g:select name="method" from="${['GENERAL', 'GROUND', 'SEA', 'AIR']}" 
    onchange="${remoteFunction(action:'options', update:'commodity', 
     params:''method=' + this.value')}" /> 
<select id="commodity"></select> 

我確定我搞砸了一些語法,你一定要重構這一點來處理你的代碼。但至少你已經有了一般想法。

要使用它們,請將它們作爲ShippingOption s添加到數據庫中。這是一種方法。

["fedex", "ups"].each { name -> 
    def so = new ShippingMethod(method: "ground", name: name) 
    so.save() 
} 

PS:您還可以動態呈現送貨方式。

參見:remoteFunctiong:selecttemplatesAJAX

+0

但我在哪裏給每個「方法」的選項?我明白了,我只是有點失落。像我在哪裏給每個選項? – randomizertech 2010-09-22 20:32:00

+0

查看編輯答案。 – Pat 2010-09-23 01:42:41

+0

最後一段代碼應該去哪裏?在控制器? – randomizertech 2010-09-24 13:50:58

0

我會考慮重新設計你的用戶界面,並改變流動。 您正在描述的下拉依賴關係表明,表單可能應該被拆分,並採用「類似嚮導」的解決方案將導致更加便於用戶使用的且可靠的解決方案,該方法在沒有JavaScript的情況下也能正常工作。

+0

解釋一下,我不明白你想說什麼。我願意接受任何建議。但我需要用戶選擇一個選項,然後根據具有某些選項。 – randomizertech 2010-09-24 18:59:11

+0

我假設兩個下拉菜單位於同一頁面上,因此存在問題。我建議你也許可以重新設計界面,並通過UI創建一個替代流程,這不需要依賴選擇下拉菜單。 – mfloryan 2010-09-24 21:08:31

+0

不,它必須是這樣的 – randomizertech 2010-09-27 18:54:13

相關問題