Visualización Condicional
motivación
[editar]Usted tiene una lista de elementos que desea mostrar en el interior de un bucle de repetición. ¿Quieres algunos elementos a tener un estilo diferente, basado en el contenido de los productos.
método
[editar]Usaremos los XForms elemento' 'grupo' para mostrar condicionalmente dentro de un epígrafe de la cuenta de repetición.
Ejemplo de XML Fragement
[editar]Supongamos que el formulario tiene los siguientes datos en una instancia:
<my-nodes>
<my-node>
<element1>true</element1>
<element2>Element2 Value</element2>
</my-node>
<my-node>
<element1>false</element1>
<element2>Element2 Value</element2>
</my-node>
<my-node>
<element1>true</element1>
<element2>Element2 Value</element2>
</my-node>
</my-nodes>
Display condicional de Artículos
[editar]El siguiente texto será sólo de salida 'elemento2 cuando 'element1 tiene un valor de verdad ''.
<xf:repeat nodeset="//my-node">
<xf:group ref=".[element1='true']">
<xf:output ref="element2"/>
</xf:group>
</xf:repeat>
La sintaxis '. [a =' b ']' dice que desde el nodo actual si el elemento 'a es igual al valor 'B, entonces la salida de los elementos dentro del grupo.
Formato condicional de los elementos
[editar]Esta misma estrategia se puede utilizar para encerrar salida en div diferente o elementos span.
<xf:repeat nodeset="my-node">
<xf:group ref=".[element1='true']">
<xf:output ref="element2" class="strong"/>
</xf:group>
<xf:group ref=".[element1='false']">
<xf:output ref="element2"/>
</xf:group>
</xf:repeat>
En el ejemplo anterior, todos los nodos con element1 = 'true' tendrán 'class = "fuerte" a en la salida y cualquier elemento con 'element1 =' false' no tendrá el atributo de la salida.
Muestra XForms appliction
[editar]Código Fuente
[editar]En este ejemplo tenemos que mostrar una lista de sinónimos de un término específico. Los sinónimos están listadas y un término preferido se muestra con una fuente en negrita.
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xf="http://www.w3.org/2002/xforms">
<head>
<title>Conditional Display</title>
<style type="text/css">
@namespace xf url("http://www.w3.org/2002/xforms");
body {font-family:Helvetica, sans-serif}
.strong {font-weight:bold;}
/* this puts everything under the repeat element into a single line */
xf|repeat * {display:inline;}
</style>
<xf:model>
<xf:instance xmlns="" id="current-synset">
<data>
<synset-id>3</synset-id>
<synonym>
<preferred>false</preferred>
<syn-name>Boolean-Value</syn-name>
</synonym>
<synonym>
<preferred>false</preferred>
<syn-name>Conditional-Value</syn-name>
</synonym>
<synonym>
<preferred>false</preferred>
<syn-name>Flag</syn-name>
</synonym>
<synonym>
<preferred>true</preferred>
<syn-name>Indicator</syn-name>
</synonym>
<synonym>
<preferred>false</preferred>
<syn-name>Yes/No-Value</syn-name>
</synonym>
</data>
</xf:instance>
</xf:model>
</head>
<body>
=== Synonym Set ===
<span>(preferred term is bold)</span><br />
<xf:label>Synonyms: </xf:label>
<xf:repeat nodeset="instance('current-synset')/synonym" id="repeat">
<xf:group ref=".[preferred='true']">
<xf:output ref="syn-name" class="strong"/>
</xf:group>
<xf:group ref=".[preferred='false']">
<xf:output ref="syn-name"/>
</xf:group>
</xf:repeat>
</body>
</html>
Discusion
[editar]XForms 1.1 también incluye el 'si' atributo. Algunos XForms condicional puede usar esto para visualización de los elementos.