XForms/Agrupar Controles
Apariencia
< XForms
Motivación
[editar]Desea mostrar condicionalmente un grupo de elementos de base en el valor seleccionado de una lista. Esto funciona similar a un "switch / case", pero que puede tener cada vista dependen de complejas expresiones XPath que se evalúan como true o false.
Pantalla de imagen
[editar]En la imagen de arriba de la pantalla muestra como agrupa las etiquetas
Programa de ejemplo
[editar]
<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<?xsltforms-options debug="yes"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<head>
<title>Writers (Subforms)</title>
<xforms:model>
<xforms:instance>
<writers xmlns="">
<writer firstname="Albert" lastname="Camus" selected="false">
<book year="1938" title="Caligula"/>
<book year="1942" title="L'étranger"/>
<book year="1947" title="La peste"/>
<book year="1951" title="L'homme révolté"/>
</writer>
<writer firstname="Blaise" lastname="Cendrars" selected="false">
<book year="1925" title="L'or"/>
<book year="1948" title="Bourlinguer"/>
</writer>
<writer firstname="Victor" lastname="Hugo" selected="false">
<book year="1831" title="Notre-Dame de Paris"/>
<book year="1838" title="Ruy Blas"/>
<book year="1856" title="Les contemplations"/>
<book year="1862" title="Les misérables"/>
</writer>
<writer firstname="Edmond" lastname="Rostand" selected="false">
<book year="1897" title="Cyrano de Bergerac"/>
<book year="1904" title="Chantecler"/>
</writer>
<writer firstname="Antoine" lastname="de Saint-Exupery" selected="false">
<book year="1931" title="Vol de nuit"/>
<book year="1942" title="Pilote de guerre"/>
<book year="1943" title="Le petit prince"/>
</writer>
</writers>
</xforms:instance>
</xforms:model>
</head>
<body>
<h3>Writers (Subforms)</h3>
<xforms:repeat nodeset="writer" appearance="compact">
<p>
<xforms:output ref="@firstname"/> <xforms:output ref="@lastname"/> 
<xforms:trigger>
<xforms:label><xforms:output value="choose(@selected != 'true','Show','Hide')"/> Books</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:load if="@selected != 'true'" show="embed" targetid="subform" resource="books.xml"/>
<xforms:unload if="@selected = 'true'" targetid="subform"/>
<xforms:setvalue ref="@selected" value=". != 'true'"/>
</xforms:action>
</xforms:trigger>
<xforms:group id="subform"/>
</p>
</xforms:repeat>
</body>
</html>
Discusión
[editar]Este programa es muy similar a la del ejemplo que utiliza un botón para conmutar un interruptor / caso pero el valor se calcula dinámicamente por cualquier expresión XPath. En el ejemplo anterior que utiliza switch / case / toggle utiliza un evento XML para hacer un caso específico visible.