<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Desarrollosweb.net &#187; formularios</title>
	<atom:link href="http://www.desarrollosweb.net/tag/formularios/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.desarrollosweb.net</link>
	<description>Desarrollo de webs y aplicaciones</description>
	<lastBuildDate>Fri, 26 Mar 2010 10:53:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Cookbook ExtJS: Creando nuestros propios validadores</title>
		<link>http://www.desarrollosweb.net/2008/12/11/cookbook-crear-validadores-propios/</link>
		<comments>http://www.desarrollosweb.net/2008/12/11/cookbook-crear-validadores-propios/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 12:39:39 +0000</pubDate>
		<dc:creator>Javier Caride</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[validación]]></category>
		<category><![CDATA[vTypes]]></category>

		<guid isPermaLink="false">http://www.desarrollosweb.net/?p=58</guid>
		<description><![CDATA[Después de un puente largo, retomamos los artículos con trucos de ExtJS. En ExtJS tenemos la opción de crear nuestros propios validadores de datos para los campos de los formularios, lo que es útil si tenemos validaciones que se repiten a lo largo de nuestra aplicación. Muchos estaréis pensando que eso también lo podemos hacer [...]]]></description>
			<content:encoded><![CDATA[<p>Después de un puente largo, retomamos los artículos con trucos de ExtJS. En ExtJS tenemos la opción de crear nuestros propios validadores de datos para los campos de los formularios, lo que es útil si tenemos validaciones que se repiten a lo largo de nuestra aplicación.</p>
<p>Muchos estaréis pensando que eso también lo podemos hacer usando una función que llamemos dentro de un handler (lo cual es cierto), pero extendiendo los validadores de ExtJS conseguimos que nuestras reglas se integren automáticamente con los mecanismos de validación de formularios que trae &#8220;de serie&#8221; ExtJS</p>
<p>Vamos a crear una función de validación que chequee el valor de dos campos de forma que sólo uno de ellos tenga valor mayor que cero. Para ello lo primero que hacemos es añadir a la configuración de los campos del formulario una etiqueta propia &#8216;exclusionPair&#8217; (que nos indicará el id del otro campo que excluye el valor del actual) e indicamos que queremos usar nuestro validador</p>
<pre name="code" class="javascript">
{
    fieldLabel : 'Haber',
    xtype: 'numberfield',
    id: 'frm_mov_haber',
    name : 'mov_haber',
    // el campo exclusionPair indica cual es el id del otro campo que excluye a este
    // es un parametro de configuracion que nos hemos inventado
    exclusionPair: 'frm_mov_deber',
    vtype: 'exclusionNotZero', // función de validación que queremos usar
    allowBlank:false,
    width : 175
},{
    fieldLabel : 'Deber',
    xtype: 'numberfield',
    id: 'frm_mov_deber',
    name : 'mov_deber',
    // el campo exclusionPair indica cual es el id del otro campo que excluye a este
    // es un parametro de configuracion que nos hemos inventado
    exclusionPair: 'frm_mov_haber',
    vtype: 'exclusionNotZero', // función de validación que queremos usar
    allowBlank:false,
    width : 175
}
</pre>
<p>La forma de crear un validador es muy sencilla, lo único que hay que tener en cuenta es que tenemos que devolver un true cuando la validación sea correcta y un false si no ha pasado la validación</p>
<pre name="code" class="javascript">
/**
 * Extendemos los validadores de ExtJS que están definidos en Ext.form.VTypes
 *
 **/
Ext.apply(Ext.form.VTypes, {
    /**
     * Definimos un nuevo validador: exclusionNotZero
     *
     * Valida un par de campos numéricos para que no puedan tener valor positivo los dos ni
     * valor cero los dos.
     *
     **/
    exclusionNotZero: function(val, field) {
        /*
         * Si hay valor en el campo exclusionPair, es que tenemos que hacer la validación
         */
        if (field.exclusionPair) {
            // Nos quedamos con la instancia del objeto indicado en exclusionPair
            var pair = Ext.getCmp(field.exclusionPair);
            // Nos quedamos con el valor del campo
            var pairValue = pair.getValue();

            if ((pairValue > 0) &#038;&#038; (val > 0)) {
                /**
                 * Si los dos tienen un valor positivo, la regla de validación no se pasa
                 * marcamos el campo como no válido y un mensaje
                 */
                field.markInvalid('Un movimiento no puede tener a la vez haber y deber');
                return false;
            } else if ((pairValue == 0) &#038;&#038; (val == 0)){
                /**
                 * Si los dos tienen un valor cero, la regla de validación no se pasa
                 * marcamos el campo como no válido y un mensaje
                 */
                field.markInvalid('Un movimiento no puede tener haber y deber a cero');
                return false;
            } else {
                /**
                 * Si llegamos aquí es que la regla se ha pasado. Como anteriormente un campo
                 * pudo haberse marcado como no válido, los desmarcamos por si acaso
                 */
                field.clearInvalid();
                pair.clearInvalid();
                return true;
            }
        }
        /**
         * El campo no tiene valor en exclusionPair, devolvemos true para que se valide el campo
         */
        return true;
    }
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.desarrollosweb.net/2008/12/11/cookbook-crear-validadores-propios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
