<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
    <!-- Reviewed: no -->
<sect2 id="zend.dojo.form.decorators">
    <title>Decoradores de Forms Específicos de Dijit</title>

    <para>La mayoría de los elementos de formularios pueden usar el decorador
        DijitElement, que tomará los parámetros dijit de los elementos, y
        pasarán estos y otros metadatos al ayudante de vista especificado por el
        elemento. Sin embargo, para decorar los forms, sub forms, y grupos de
        visualización, hay un conjunto de decoradores correspondientes a los
        diversos esquemas dijit.</para>

    <para> Todos los decoradores dijit buscan la propiedad
        <property>dijitParams</property> del elemento que va a ser
        decorado, y mandarlos como un array <varname>$params</varname> al
        ayudante de vista dijit que se está usando. Luego, éstos son separados
        de cualquiera de las otras propiedades para evitar la duplicación de
        información. </para>

    <sect3 id="zend.dojo.form.decorators.dijitElement">
        <title>Decorador DijitElement</title>

        <para> Al igual que <link
                linkend="zend.form.standardDecorators.viewHelper"> el decorador
                ViewHelper</link> , DijitElement espera una propiedad del
            <property>helper</property> en el elemento que luego usará
            como el ayudante de vista cuando lo renderice. Los parámetros Dijit
            suelen ser arrastrados directamente desde el elemento, pero también
            pueden ser pasados como opciones vía la clave
            <property>dijitParams</property> (el valor de esa clave debe
            ser un array asociativo de opciones). </para>

        <para> Es importante que cada elemento tenga un único ID (como traído
            desde el método <methodname>getId()</methodname> del elemento). Si
            se detectan duplicados dentro del ayudante de vista
                <methodname>dojo()</methodname> , el decorador accionará un
            aviso, pero luego creará un único ID añadiéndole lo que devuelve
                <methodname>uniqid()</methodname> al identificador. </para>

        <para>El uso estándar es simplemente asociar este decorador como el
            primero de su cadena de decoradores, sin opciones
            adicionales.</para>

        <example id="zend.dojo.form.decorators.dijitElement.usage">
            <title>Uso del Decorador DijitElement</title>

            <programlisting language="php"><![CDATA[
$element->setDecorators(array(
    'DijitElement',
    'Errors',
    'Label',
    'ContentPane',
));
]]></programlisting>
        </example>
    </sect3>

    <sect3 id="zend.dojo.form.decorators.dijitForm">
        <title>Decorador DijitForm</title>

        <para> El decorador DijitForm es muy similar al <link
                linkend="zend.form.standardDecorators.form">Form
                decorator</link> ; de hecho, básicamente puede ser utilizado de
            manera intercambiable con él, ya que utiliza el mismo nombre de
            ayudante de vista ('form'). </para>

        <para>Dado que <command>dijit.form.Form</command> no requiere ningún parámetro dijit para
            la configuración, la principal diferencia es que el ayudante de
            vista dijit del form exige que se pase un <acronym>DOM</acronym> ID para garantizar que
            la creación programática del dijit pueda trabajar. El decorador
            garantiza esto, pasando el nombre del form como el identificador.
        </para>
    </sect3>

    <sect3 id="zend.dojo.form.decorators.dijitContainer">
        <title>Decoradores basados en DijitContainer</title>

        <para> El decorador <classname>DijitContainer</classname> es en
            realidad una clase abstracta desde la cual derivan una variedad de
            otros decoradores. Ofrece la misma funcionalidad de <link
                linkend="zend.dojo.form.decorators.dijitElement"
                >DijitElement</link> , con el añadido del soporte para títulos.
            Muchos esquemas de dijits requieren o pueden utilizar un título;
            <classname>DijitContainer</classname> utilizará la propiedad del elemento leyenda (legend)
            si está disponible, y también pueden utilizar tanto 'legend' o
            'title' como opción del decorador, si es pasada. El título será
            traducido si un adaptador de traducción con su correspondiente
            traducción está presente. </para>

        <para> La siguiente es una lista de decoradores que heredan de
            <classname>DijitContainer</classname> : </para>

        <itemizedlist>
            <listitem>
                <para>AccordionContainer</para>
            </listitem>
            <listitem>
                <para>AccordionPane</para>
            </listitem>
            <listitem>
                <para>BorderContainer</para>
            </listitem>
            <listitem>
                <para>ContentPane</para>
            </listitem>
            <listitem>
                <para>SplitContainer</para>
            </listitem>
            <listitem>
                <para>StackContainer</para>
            </listitem>
            <listitem>
                <para>TabContainer</para>
            </listitem>
        </itemizedlist>

        <example id="zend.dojo.form.decorators.dijitContainer.usage">
            <title>Uso del Decorador DijitContainer</title>

            <programlisting language="php"><![CDATA[
// Use un TabContainer para su form:
$form->setDecorators(array(
    'FormElements',
    array('TabContainer', array(
        'id'          => 'tabContainer',
        'style'       => 'width: 600px; height: 500px;',
        'dijitParams' => array(
            'tabPosition' => 'top'
        ),
    )),
    'DijitForm',
));

// Use un ContentPane en su sub form (que puede utilizarse con todos, pero no
// con AccordionContainer):
$subForm->setDecorators(array(
    'FormElements',
    array('HtmlTag', array('tag' => 'dl')),
    'ContentPane',
));
]]></programlisting>
        </example>
    </sect3>
</sect2>
