selectitems selectitem one objects how example ejemplo combobox custom-controls xpages

combobox - selectitem - selectonemenu example



Control personalizado reutilizable con ComboBox: Agregar<selectItems> a través de la definición de propiedad (3)

Estoy tratando de configurar un control personalizado reutilizable con un cuadro combinado para usar con Bootstrap. El control personalizado ya tiene todos los divs, estilos, etc. que se necesitan para Bootstrap.

Ahora, agregué una definición de propiedad (escriba: cadena, Permitir varias instancias), para que cuando use el control personalizado en cualquier formulario, pueda agregar valores seleccionables al cuadro combinado:

Como una propiedad de valores para el cuadro combinado, agregué un elemento calculado con el siguiente JavaScript:

compositeData.listValues

Cuando uso el control personalizado, puedo agregar valores individualmente, una instancia para un valor seleccionable y funciona muy bien:

Sin embargo, cuando calculo el valor en, digamos, obtengo una lista de valores de un documento de palabras clave o columna de vista:

la lista de valores del cuadro combinado se ve así:

¿Cómo puedo pasar una lista de valores a través de la definición de propiedad al cuadro combinado? ¿Es posible?

ACTUALIZACIÓN: ¿Hay alguna forma de recorrer las instancias de una definición de propiedad? De esa manera podría verificar si la instancia actual es un valor de texto único o una matriz, poner una lista de todos los valores y devolverlo como una lista de valores.

¡Muchas gracias por su ayuda!


¿Intentó establecer la propiedad como objeto en lugar de cadena? Eso debería permitirle pasar una matriz al control personalizado con implosión y explosión.


ACTUALIZACIÓN: David Leedy señaló una advertencia con respecto al uso de la coma como separador para @Implode / @ Explode. Esto podría causar problemas, si alguno de tus valores contiene una coma. Entonces, enmendé mi respuesta para dar cuenta de eso:

Antes que nada, me gustaría agradecer a todos los que vieron esta pregunta y / o respondieron.

Tuve una epifanía esta mañana y encontré una solución. Puede que no sea muy elegante pero funciona.

Como vamos a usar @Implode / @ Explode para compilar la lista de valores para el cuadro combinado, debemos agregar otra definición de propiedad al control personalizado reutilizable. Esta propiedad se usará para transmitir la información, cómo se separará la lista de valores calculados:

Cuando agregue valores a las propiedades personalizadas, el valor calculado para obtener la lista de valores de un documento de palabras clave debería verse así:

var oView:NotesView = database.getView(''$vwSYSLookupKeywords''); var oDocument:NotesDocument = oView.getDocumentByKey(''.DBProfile'', true); @Implode(oDocument.getItemValue(''iTxtTest''),'';'')

Como puede ver, en este ejemplo uso ";" implosionar la lista.

Esta es ahora mi lista de propiedades personalizadas:

Y esta es la marca para todo el control personalizado donde uso el control personalizado reutilizable:

<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom" xmlns:xe="http://www.ibm.com/xsp/coreex"> <xc:ccLegend listSeparator=";"> <xc:this.listValues> <xp:value>Test 1</xp:value> <xp:value>Test 2</xp:value> <xp:value>#{javascript:var oView:NotesView = database.getView(''$vwSYSLookupKeywords''); var oDocument:NotesDocument = oView.getDocumentByKey(''.DBProfile'', true); @Implode(oDocument.getItemValue(''iTxtTest''),'';'')}</xp:value> </xc:this.listValues> </xc:ccLegend> </xp:view>

Si ahora uso lo siguiente en mi lista de valores calculados para el cuadro combinado:

var sSeparator = compositeData.listSeparator; @Explode(@Implode(compositeData.listValues, sSeparator), sSeparator);

los valores se muestran correctamente en el cuadro combinado:

¡Esto también funciona con @DBColumn y @DBLookup!

Si tiene una mejor solución, no dude en publicarla aquí.


En las propiedades de Control personalizado, al lado de Tipo, déjelo como Cadena y luego haga clic en el icono de la carpeta. Allí puedes elegir tipos complejos.

Aquí puede elegir ver la columna, entre una amplia gama de opciones.