2010-09-22 49 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

相关问题