grails groovy combobox multiple-select

Grails: carga datos en un ComboBox dependiendo de otro



groovy multiple-select (3)

Parece que querrás usar AJAX para esto. Una forma de hacerlo es usar una combinación de plantillas y objetos de dominio:

// 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 ]) } }

Y la plantilla:

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

Y en su gsp con el cuadro de selección en él:

<!-- ... 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>

Estoy seguro de que he estropeado algo de sintaxis, y definitivamente tendrá que refactorizar esto un poco para que funcione con su código. Pero al menos tienes la idea general.

Y para usarlos, agréguelos a la base de datos como ShippingOption . Aquí hay una manera de hacerlo.

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

PD: también podría renderizar los métodos de envío dinámicamente también.

Ver también: remoteFunction , g: select , templates y AJAX

Digamos que tengo un combobox con las opciones GENERAL, AIR, GROUND y SEA

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

Y luego otro cuadro combinado que carga cierta información dependiendo de si selecciona GENERAL, AIR, GROUND o SEA.

Digamos que GROUND tiene 3 opciones, FedEx, USPS, DHL , pero AIR tiene otras diferentes, AIRPLANE, JET, HOT AIR BALLOON .

El nombre del otro <g:select> debe ser "commodity"

Pensé en crear un archivo javascript y tratar todo como HTML, pero investigué en Google y no es tan simple como pensaba.

¿Alguien sabe cuál sería la mejor manera de hacer esto? ¡Gracias por adelantado!

FG


Consideraría rediseñar tu UI y cambiar el flujo. Una dependencia desplegable que está describiendo sugiere que la forma probablemente debería dividirse y adoptar una solución tipo "asistente" dará como resultado una solución más amigable y fácil de usar que también funcionará sin JavaScript.