【问题标题】:Extjs custom vtypeExtjs 自定义 vtype
【发布时间】:2012-11-16 13:08:39
【问题描述】:

我正在尝试使用自定义 vtype 验证文本字段以过滤空格,例如:“”。 我在 app.js 中定义了我的自定义 vtype(我使用 mvc 模式)。

    Ext.Loader.setConfig({
        enabled : true,
        paths: {
            Ext: 'vendor/ext41/src',
            My: 'app'
        } 
    });
    Ext.apply(Ext.form.field.VTypes, {
        descartarBlanco:  function(value) {
            return /^\s+$/.test(value);
        }
    });

    Ext.application({
        name: 'CRUDManantiales',
        appFolder: 'app',
        controllers: ['Ui','Usuarios'],
        ....
    });

但是,Firebug 显示此错误:

TypeError: vtypes[vtype] 不是函数

我认为语法是正确的。但是,我不知道在哪里插入 Vtype 的代码。 任何的想法 ?。 谢谢。

【问题讨论】:

  • 您究竟何时何地收到此错误?
  • 如果您在控制台输入Ext.form.field.VTypes(在您的应用加载后),是否有您的descartarBlanco 条目?
  • Ext.form.field.VTypes 显示基本的 VType,但不显示我的自定义 VType "descartarBlanco"
  • 现在这很神秘。您实际上是在上面发布的app.js 文件中定义了一个 vtype,还是在另一个文件中定义了它?
  • 两者。首先,我尝试按照上面发布的方法。怎么不行,在外部js“validator.js”中写代码,并在“app.js”之前包含这个-但问题是一样的!

标签: javascript forms validation extjs4


【解决方案1】:

在渲染表单之前,我将自定义 vtypes 放在应用程序的控制器中。

Ext.define('MyApp.controller.Main', {
    extend: 'Ext.app.Controller',
    ...
    init: function () {
        var me = this;
        me.control({
            ...
            'form': {
                beforerender: this.applyVtypes
            },
            ...
        })
   },
   ...
   applyVtypes: function() {
       Ext.apply(Ext.form.field.VTypes, {
           descartarBlanco:  function(value) {
               return /^\s+$/.test(value);
           }
       }
   }
   ...    
}

【讨论】:

    【解决方案2】:

    我遇到了这个问题,试图找到解决方案,因为我遇到了同样的问题。当我将它添加到 Ext.application 中的 'init:' 时,它运行良好。

        Ext.application({
                ..., 
    
                launch: function() { 
                    ... 
                }, 
    
                init: function() {
                    Ext.apply(Ext.form.field.VTypes, {
                        descartarBlanco:  function(value) {
                            return /^\s+$/.test(value);
                        }
                    }
                    console.log(Ext.form.field.VTypes); // for verification
                }
        })
    

    【讨论】:

      【解决方案3】:

      您可以配置自己的电子邮件验证。

      xtype:'textfield',
      fieldLabel:'Email',
      name:'email',
      maskRe: /[a-z0-9_.-@+]/i,//你可以根据自己的情况更改 要求。

      【讨论】:

      • 此代码不会检查字段中已存在的字符。
      【解决方案4】:

      可能是同样的问题,但对于 Ext.data.Types,它仅在类型名称为大写时才有效。当小写字母会收到与您所看到的内容类似的消息时。

      【讨论】:

        【解决方案5】:

        您使用Ext.Loader,因此Ext.form.field.VTypes 可以稍后在某处被覆盖。尝试在实际使用之前添加 vtype 定义。

        【讨论】:

        • 嗯,我使用 mvc 模式,我将 te VType 代码放入 app.js 中,以使用所有形式的自定义验证器。那么,sugest 在哪里覆盖了代码?。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多