ExtJS — Необязательное поле модели с проверкой

#javascript #extjs #model

Вопрос:

В 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'  }  } });   

Ответ №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-!#$%amp;'* /=?^_`{|}~]))*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());  } });  

Комментарии:

1. На самом деле должна быть разрешена не пустая строка, а наличие поля. Например, учитывая мою модель, использование my_model.add({ date, msg }) должно работать, а my_model.add({ date, msg, email }) также должно работать, и предоставленное электронное письмо должно быть подтверждено.

2. Предоставленный образец работает так, как вы хотите.. пожалуйста, попробуйте это на скрипке.