`
yxc_gdut
  • 浏览: 96895 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ext editorGridpanel 验证

阅读更多

对深入浅出提供表格验证方法出现的bug进行改进。

 

//验证表格数据是否合法       思路:检查modified中每个record 根据每个属性的editor对record中的属性进行验证。
    

var records = store.getModifiedRecords();
    if(records.length<1){
     return ;
    }
    for(var j=0;j<records.length;j++){
     var record = records[j];//得到一个record
     var fields = record.fields.keys;//fields里面是record的属性数组
     for(var i = 0 ;i<fields.length;i++){/ /检测record的每个字段值是否合法   //根据fields里面的属性 检测每一个record
      var name = fields[i];
      var value = record.data[name];//根据record得到属性值
      var cm = grid.getColumnModel();
      var colIndex = cm.findColumnIndex(name);//根据名称找到它在grid所在的列
      if(colIndex == -1)continue;//如果不在grid列里面进行下一次循环
      var rowIndex = store.indexOfId(record.id);//得到当前验证属性的行
      if(null!=cm.getCellEditor(colIndex)){
       cm.getCellEditor(colIndex).field.reset();//因为field中还保存着数据 只是没有显示出来,
                                                                     //当验证record的时候field会把record中属性的空值替换成field的值 那么allowblank=false验证失败
       var editor = cm.getCellEditor(colIndex).field;//得到每一个editor的Ext.form.field对象。利用field进行验证
       if(!editor.validateValue(value)){
        Ext.Msg.alert("提示","数据不完整",function(){
         grid.startEditing(rowIndex,colIndex);
        });
        return false;
       }
      }
     }
    }

 

 

 深入浅出提供表格验证方法出现的bug:(它的方法就不贴出来了)

cm.getCellEditor(colIndex).field.reset();//

当我在editorGridpanel 新增一条数据的时候 原方法能验证出record的错误 我就把数据编辑完整保存
新增第二条数据的时候  验证结果跟逻辑不符了
于是就用火狐debug
发现 textfield组件的getErrors方法(textfield用它来验证数据的)
37770 value = value || this.processValue(this.getRawValue());
当value为空时就会执行this.processValue(this.getRawValue());  得到textfield的当前值
虽然textfield编辑完后被隐藏 但是textfield上面的值还是没有被清空,所以value就被换成上一次编辑遗留下来的数据,allowBlank:false验证失败
所以必须在对数据验证之前将其清空了 所以

cm.getCellEditor(colIndex).field.reset();//

 
 
37767 getErrors: function(value) {
37768 var errors = Ext.form.TextField.superclass.getErrors.apply(this, arguments);
37770 value = value || this.processValue(this.getRawValue());
37772 if (Ext.isFunction(this.validator)) {
37773 var msg = this.validator(value);
37774 if (msg !== true) {
37775 errors.push(msg);
37776 }
37777 }
37779 if (value.length < 1 || value === this.emptyText) {
37780 if (this.allowBlank) {
37782 return errors;
37783 } else {
37784 errors.push(this.blankText);
37785 }
37786 }
37788 if (!this.allowBlank && (value.length < 1 || value === this.emptyText)) {
37789 errors.push(this.blankText);
37790 }
37792 if (value.length < this.minLength) {
37793 errors.push(String.format(this.minLengthText, this.minLength));
37794 }
37796 if (value.length > this.maxLength) {
37797 errors.push(String.format(this.maxLengthText, this.maxLength));
37798 }
37800 if (this.vtype) {
37801 var vt = Ext.form.VTypes;
37802 if(!vt[this.vtype](value, this)){
37803 errors.push(this.vtypeText || vt[this.vtype +'Text']);
37804 }
37805 }
37807 if (this.regex && !this.regex.test(value)) {
37808 errors.push(this.regexText);
37809 }
37811 return errors;
37812 },
0
0
分享到:
评论
1 楼 liuhjxuell 2013-08-29  
太给力了,只是这个校验还有一点,对于数字类型的校验allowBlank:false验证都是失败,即使页面上有填写的数据。最后将数字修改为字符串校验正常editor.validateValue(value+"")

相关推荐

    可编辑表格Ext.grid.EditorGridPanel

    Ext.grid.EditorGridPanel是Ext JS库中的一个组件,主要用于创建具有可编辑单元格的表格。这个组件在数据展示和编辑方面提供了丰富的功能,是构建数据密集型应用的理想选择。下面将详细阐述其特点、工作原理及如何...

    Ext组件描述,各个组件含义

    **2.5 Editor Grid Panel (Ext.grid.EditorGridPanel)** - **xtype**: `editorgrid` - **功能描述**:Editor Grid Panel 是一个支持行级编辑的网格面板。 - **主要用途**:适合于需要对表格中的数据进行编辑的场景...

    Ext3.0 api帮助文档

    - **Ext.grid.EditorGridPanel**: 提供单元格级别的编辑功能。 6. **表单(Forms)** - **Ext.form.FormPanel**: 创建表单的容器,支持多种表单元素和验证。 - **Ext.form.Field**: 表单字段类,如文本框、选择...

    Ext.net后台分页增删改

    同时,使用Ext.NET的验证机制可以确保输入数据的正确性。 总的来说,Ext.NET提供了一套强大的工具来实现后台分页、树状图和Grid的CRUD操作。尽管网上资源相对较少,但通过深入学习和实践,开发者能够熟练掌握其用法...

    ext4.2学习之路

    - **EditorGridPanel**:具备编辑功能的网格面板,方便数据的批量编辑。 - **GridPanel**:表格组件,用于展示和管理大量数据。 - **PagingToolbar**:分页工具栏,用于处理大数据集的分页显示。 - **Panel**:面板...

    Ext JS in Action.pdf

    - **编辑数据网格(EditorGridPanel)**:一种特殊的网格,允许用户直接在网格内编辑数据。 - **树形控件(Trees)**:用于展示层次结构数据。 - **工具栏和菜单(Toolbars and Menus)**:提供导航和操作选项。 - *...

    ext学习之路

    - **EditorGridPanel**:具备编辑功能的网格面板,适用于数据表格的编辑操作。 - **GridPanel**:基本的数据表格组件,可展示大量数据并支持排序、过滤等功能。 - **PagingToolbar**:分页工具栏,用于处理大量数据...

    .net Ext 开发

    例如,使用Store与Model定义数据结构,GridPanel展示数据,EditorGridPanel支持直接在网格中编辑,以及FormPanel用于添加和修改数据,这些都是ExtJS实现CRUD操作的关键组件。 接下来,我们探讨树形结构的应用,特别...

    extjs xtype

    10. `editorgrid` - `Ext.grid.EditorGridPanel`:可编辑的表格,允许用户直接在表格中修改数据。 11. `grid` - `Ext.grid.GridPanel`:标准的表格组件,用于展示数据。 12. `paging` - `Ext.PagingToolbar`:分页...

    ExtJS3总结内容

    - `editorgrid`: `Ext.grid.EditorGridPanel` - `flash`: `Ext.FlashComponent` - `grid`: `Ext.grid.GridPanel` - `listview`: `Ext.ListView` - `panel`: `Ext.Panel` - `progress`: `Ext.ProgressBar` - `...

    老师整理的extjs学习笔记

    `Ext.grid.EditorGridPanel` 是一个扩展了 `Ext.grid.GridPanel` 的组件,允许直接在表格中编辑数据。它结合了表格视图和表单编辑功能,使得数据编辑变得更加直观。 #### 九、Ext.tree.TreePanel -- 树的使用 **...

    ssh+extjs4.0grid增删改查

    - Ext JS 4.0的Field验证机制,确保前端输入的有效性。 综上所述,"ssh+extjs4.0grid增删改查"是一个涵盖了Java Web开发多个层面的主题,包括后端的SSH框架整合和数据库操作,以及前端的JavaScript客户端应用开发...

    ExtJS基础教程.pdf

    4. **表格类**:包括网格面板(GridPanel)、编辑网格面板(EditorGridPanel)、属性网格(PropertyGrid)、视图(View)、分组视图(GroupingView)、列模型(ColumnModel)和选择模型(SelectionModel),支持复杂的数据展示和...

Global site tag (gtag.js) - Google Analytics