【问题标题】:ExtJS - Optional model field with validationExtJS - 带有验证的可选模型字段
【发布时间】:2021-10-20 14:08:42
【问题描述】:

在 ExtJS 6.02 中是否可以有一个可选但也有验证的字段模型?

电子邮件字段示例,可能存在也可能不存在,但电子邮件必须有效(如果存在)。

Ext.define('my_model', {
   extend  : 'Ext.data.Model',

   identifier: {
      type      : 'sequential',
      seed      : 1,
      increment : 1
   },

   fields: [{
      name : 'date',
      type : 'date'
   }, {
      name : 'msg',
      type : 'string',
   }, {
      name : 'email',
      type : 'string',
   }],

   validators: {
      date: {
         type: 'presence'
      },
      msg: {
         type : 'length',
         min  : 2
      },
      email: {
         type : 'email'
      }
   }
});

【问题讨论】:

    标签: javascript extjs model


    【解决方案1】:

    您可以覆盖电子邮件验证器的匹配器以允许空字符串:

    Ext.define('my_model', {
        extend: 'Ext.data.Model',
    
        identifier: {
            type: 'sequential',
            seed: 1,
            increment: 1
        },
    
        fields: [{
            name: 'date',
            type: 'date'
        }, {
            name: 'msg',
            type: 'string',
        }, {
            name: 'email',
            type: 'string',
            allowBlank: true
        }],
    
        validators: {
            date: {
                type: 'presence'
            },
            msg: {
                type: 'length',
                min: 2
            },
            email: {
                type: 'email',
                // Override matcher to allow empty string
                matcher: /^$|^(")?(?:[^\."])(?:(?:[\.])?(?:[\w\-!#$%&'*+\/=?\^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/
            }
        }
    });
    
    Ext.application({
        name: 'Fiddle',
    
        launch: function () {
            var myModel = Ext.create('my_model', {
                date: new Date(),
                msg: 'Some Message',
                //email: 'mustermann@gmail.com',
                email: '',
            });
            console.log(myModel.isValid());
        }
    });
    

    【讨论】:

    • 应该允许的不是真正的空字符串,而是该字段的存在。例如给定我的模型,使用my_model.add({ date, msg }) 必须有效,my_model.add({ date, msg, email }) 也必须有效,并且必须验证提供的电子邮件。
    • 提供的示例可以按您的意愿工作。请在小提琴中尝试一下。
    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2010-12-10
    相关资源
    最近更新 更多