使用Ext Form自动绑定Html中的Form元素

  1. 在做EXT开发中,尽能的是使用上EXT的所有功能,不然就浪费了那500K的身材了,EXT的主要功能之一的FORM组件,验证功能很强大,而且样式也挺好看的。但在使用EXT的form布局来设计表单时,难以直观的看到页面的排板模形,特别是对于习惯了使用<table>来排板<input>等元素的程序员来说,更是难以接受。为了满足习惯性可观的设计表面排板,可以在页面加载完后(Ext.onReady),将EXT的FORM元素自动绑定相应的htmlform元素,这样则在页面设计时直接使用html中form元素,而不必再关心到EXT排板。

  2. //把ext 对象绑定在HtmlForm元素时的ext属性中   
  3. Ext.override(Ext.Component, {  
  4. initComponent :function(){  
  5.   this.on('render', function(){  
  6.    if(this.el)  
  7.     Ext.getDom(this.el).ext= this 
  8.    if(this.hiddenField)//Combo   
  9.     Ext.getDom(this.hiddenField).ext= this 
  10.    })  
  11.  
  12. });    
  13. ­  
  14. //获取验证信息   
  15. //将EXT的验证属性写成JSONString格式,保护在val属性中   
  16. $getValid = function(el){  
  17. var valid= "{}" 
  18.     if(Ext.getDom(el).attributes['val'])  
  19.      valid = Ext.getDom(el).attributes['val'].nodeValue;  
  20.     return valid;  
  21.  
  22. //自动绑定Html中的Form元素   
  23. $blindFormField = function(){  
  24. var objArray =Ext.DomQuery.select("input[type=submit]");     
  25.     Ext.each(objArray, function(obj) {  
  26.         var btn = new Ext.Button({     
  27.             text :obj.value,     
  28.             applyTo :obj,     
  29.             handler :obj.onclick,     
  30.             type :obj.type     
  31.         });     
  32.         btn.getEl().replace(Ext.get(obj));     
  33.     });     
  34.     var objArray = Ext.DomQuery.select("input[type=reset]");     
  35.     Ext.each(objArray, function(obj){     
  36.         var btn = new Ext.Button({     
  37.             text :obj.value,     
  38.             applyTo :obj,     
  39.             handler :obj.onclick,     
  40.             type :obj.type     
  41.         });     
  42.         btn.getEl().replace(Ext.get(obj));     
  43.     });     
  44.     var objArray = Ext.DomQuery.select("input[type=button]");     
  45.     Ext.each(objArray, function(obj){     
  46.         var btn = new Ext.Button({     
  47.             text :obj.value,     
  48.             applyTo :obj,     
  49.             handler :obj.onclick,     
  50.             type :obj.type     
  51.         });     
  52.         btn.getEl().replace(Ext.get(obj));     
  53.     });     
  54.          
  55.     var objArray = Ext.DomQuery.select("input[type=text]");     
  56.     Ext.each(objArray, function(obj) {  
  57.      if(Ext.getDom(obj).ext) return    
  58.         var txtField = new Ext.form.TextField(  
  59.          Ext.apply({applyTo:obj},eval_r('('+$getValid(obj)+')'))  
  60.         );   
  61.            
  62.     });     
  63.     var objArray = Ext.DomQuery.select("input[type=password]");     
  64.     Ext.each(objArray, function(obj){     
  65.        
  66.         var txtField = new Ext.form.CustomTextField(  
  67.          Ext.apply({applyTo:obj,inputType:'password'},eval_r('('+$getValid(obj)+')'))  
  68.         )   
  69.     });     
  70.        
  71.     var objArray = Ext.DomQuery.select("input[type=file]");     
  72.      Ext.each(objArray, function(obj){     
  73.     });     
  74.     var objArray = Ext.DomQuery.select("textarea");     
  75.     Ext.each(objArray, function(obj){     
  76.         var txtArea = new Ext.form.TextArea(  
  77.          Ext.apply({applyTo:obj},eval_r('('+$getValid(obj)+')'))  
  78.         );     
  79.     });     
  80.          
  81.     var objArray = Ext.DomQuery.select("input[type=checkbox]");     
  82.     Ext.each(objArray, function(obj){     
  83.         var checkbox = new Ext.form.Checkbox(  
  84.          Ext.apply({applyTo:obj},eval_r('('+$getValid(obj)+')'))  
  85.         );     
  86.     });     
  87.     var objArray = Ext.DomQuery.select("input[type=radio]");     
  88.     Ext.each(objArray, function(obj){     
  89.         var radio = new Ext.form.Radio(  
  90.          Ext.apply({applyTo:obj},eval_r('('+$getValid(obj)+')'))  
  91.         );     
  92.     });     
  93.          
  94.     var objArray = Ext.DomQuery.select("select");  
  95.     Ext.each(objArray, function(obj, index) {  
  96.         var select = new Ext.form.ComboBox(  
  97.          Ext.apply({transform:obj,triggerAction:'all', forceSelection: true,cls:obj.className},eval_r('('+$getValid(obj)+')'))  
  98.         );   
  99.          
  100.     });   
  101.        
  102.        
  103.     var objArray = Ext.DomQuery.select("input[type=number]");     
  104.     Ext.each(objArray, function(obj) {  
  105.        
  106.      var dateField = new Ext.form.CustomNumberField(  
  107.    Ext.apply({applyTo:obj},eval_r('('+$getValid(obj)+')'))  
  108.    );  
  109.     });   
  110.        
  111.        
  112.     var objArray = Ext.DomQuery.select("input[type=date]");     
  113.     Ext.each(objArray, function(obj) {  
  114.       var dateField = new Ext.form.CustomDateField(  
  115.       Ext.apply({applyTo:obj,format:'Y-m-d',cls:obj.className},eval_r('('+$getValid(obj)+')'))  
  116.      );   
  117.      
  118.     });   
  119.        
  120.         
  121.     var objArray = Ext.DomQuery.select("input[type=email]");     
  122.     Ext.each(objArray, function(obj) {  
  123.       var emailField = new Ext.form.TextField(  
  124.        Ext.apply({applyTo:obj,vtype:'email'},eval_r('('+$getValid(obj)+')'))  
  125.       );   
  126.     });   
  127.        
  128.        
  129.     var objArray = Ext.DomQuery.select("input[type=custom]");     
  130.     Ext.each(objArray, function(obj) {  
  131.      var m_width =  $(obj).width()+7 
  132.       var houseinfoField=  new Ext.form.HouseInfoArea(  
  133.        Ext.apply({applyTo:obj,cls:obj.className},eval_r('('+obj.val+')'))  
  134.       )   
  135.     });   
  136.  
  137.   
  138. //验证输入的合法性   
  139. $validEl = function(el){  
  140.          if(typeof(el)== "string") el =document.getElementByIdx_x(el);     
  141.     if(el.ext)  
  142.         return el.ext.validate();  
  143.     return true 
  144.  
  145.   
  146. //验证form下所有元素输入的合法性,返回true为合法,false为不合法   
  147. $valid2form = function(form){  
  148. var valid= true 
  149. var thefrm = form;  
  150. if(typeof(form)== "string") var thefrm =document.getElementByIdx_x(form);  
  151. for (i= 0; i < thefrm.elements.length;i++){   
  152.    var e =thefrm.elements[i];  
  153.   if(!e.name) continue 
  154.   if(!$validEl(e)){  
  155.    valid = false 
  156.    
  157.  
  158. return valid;  
  159.  
  160. Ext.onReady(function() {  
  161. setTimeout($blindFormField, 0);  
  162. })  
  163.   
  164. //HTML中的使用代码   
  165. <form id='myform' action='action.do' οnsubmit=''   
  166. <table>  
  167.     <tr>  
  168.         <td>字符串:</td><td><inputtype='text' id='string' name='string' val='{allowBlank:false}'/></td>  
  169.         <td>数字类型:</td><td><inputtype='number' id='number' name='number' val='{allowBlank:false}'/></td>  
  170.     </tr>  
  171.     <tr>  
  172.         <td>Email:</td><td><inputtype='email' id='email' name='email' val='{allowBlank:false}'/></td>  
  173.         <td>日期类型:</td><td><inputtype='date' id='date' name='date' val='{allowBlank:false}'/></td>  
  174.     </tr>  
  175.     <tr>  
  176.         <td>Select:</td>  
  177.             <td>  
  178.                 <select name='select' 
  179.                     <option value=1>option1</option>  
  180.                     <option value=2>option2</option>  
  181.                     <option value=3>option3</option>  
  182.                 </select>  
  183.             </td>  
  184.         <td>自定义类型:</td><td><inputtype='custom' id='custom' name='custom' val='{allowBlank:false}'/></td>  
  185.     </tr>  
  186. <table>  
  187. </form> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值