Plugin:RemoteValidator (Legacy)
This version of our Learning Center is unmaintained.
This article may be out-of-date or contain incorrect information.
Please visit the new Sencha Learning Center for up-to-date material.
From Sencha - Learn
| Summary: This plugin adds remote validation support to form fields |
| Author: Jozef Sakalos, aka Saki |
| Published: Nov 25, 2007 |
| Version: 1.0 |
| Ext Version: 2.x |
| License: LGPLv3 |
| Demo Link: View Demo |
| Forum Post: View Post |
Contents |
Information
This plugin adds remote validation support to form fields in addition to standard client side validation.
ToDo
Better documentation.
rvOptions
rvOptions is passed on to Ext.Ajax.request and is an object which may contain the following properties:
- url : String (Optional)
- params : Object/String/Function
- method : String (Optional)
- callback : Function (Optional)
- options : Object
- success : Boolean
- response : Object
- success : Function (Optional)
- response : Object
- options : Object
- failure : Function (Optional)
- response : Object
- options : Object
- scope : Object (Optional)
- form : Object/String (Optional)
- isUpload : Boolean (Optional)
- headers : Object (Optional)
- xmlData : Object (Optional)
- jsonData : Object/String (Optional)
- disableCaching : Boolean (Optional)
The rvOptions object may also contain any other property which might be needed to perform postprocessing in a callback because it is passed to callback functions.
Source Code
// vim: ts=4:sw=4:nu:fdc=4:nospell /** * Ext.ux.plugins * * @author Ing. Jozef Sakáloš <jsakalos@aariadne.com> * @copyright (c) 2007, by Ing. Jozef Sakáloš * @date 24. November 2007 * @version $Id: Ext.ux.plugins.js 596 2007-11-25 13:40:43Z jozo $ */ Ext.namespace('Ext.ux', 'Ext.ux.plugins'); /** * Remote Validator * Makes remote (server) field validation easier * * To be used by form fields like TextField, NubmerField, TextArea, ... */ Ext.ux.plugins.RemoteValidator = { init:function(field) { // save original functions var isValid = field.isValid; var validate = field.validate; // apply remote validation to field Ext.apply(field, { remoteValid:false // private ,isValid:function(preventMark) { if(this.disabled) { return true; } return isValid.call(this, preventMark) && this.remoteValid; } // private ,validate:function() { var clientValid = validate.call(this); if(!this.disabled && !clientValid) { return false; } if(this.disabled || (clientValid && this.remoteValid)) { this.clearInvalid(); return true; } if(!this.remoteValid) { this.markInvalid(this.reason); return false; } return false; } // private - remote validation request ,validateRemote:function() { this.rvOptions.params = this.rvOptions.params || {}; this.rvOptions.params.field = this.name; this.rvOptions.params.value = this.getValue(); Ext.Ajax.request(this.rvOptions); } // private - remote validation request success handler ,rvSuccess:function(response, options) { var o; try { o = Ext.decode(response.responseText); } catch(e) { throw this.cannotDecodeText; } if('object' !== typeof o) { throw this.notObjectText; } if(true !== o.success) { throw this.serverErrorText + ': ' + o.error; } var names = this.rvOptions.paramNames; this.remoteValid = true === o[names.valid]; this.reason = o[names.reason]; this.validate(); } // private - remote validation request failure handler ,rvFailure:function(response, options) { throw this.requestFailText } // private - runs from keyup event handler ,filterRemoteValidation:function(e) { if(!e.isNavKeyPress()) { this.remoteValidationTask.delay(this.remoteValidationDelay); } } }); // remote validation defaults Ext.applyIf(field, { remoteValidationDelay:500 ,reason:'Server has not yet validated the value' ,cannotDecodeText:'Cannot decode json object' ,notObjectText:'Server response is not an object' ,serverErrorText:'Server error' ,requestFailText:'Server request failed' }); // install event handlers on field render field.on({ render:{single:true, scope:field, fn:function() { this.remoteValidationTask = new Ext.util.DelayedTask(this.validateRemote, this); this.el.on(this.validationEvent, this.filterRemoteValidation, this); }} }); // setup remote validation request options field.rvOptions = field.rvOptions || {}; Ext.applyIf(field.rvOptions, { method:'post' ,scope:field ,success:field.rvSuccess ,failure:field.rvFailure ,paramNames: { valid:'valid' ,reason:'reason' } }); } }; // end of file
This page was last modified on 10 May 2008, at 10:49.
This page has been accessed 21,471 times.
