我正在使用EXTJS作为项目的前端框架。我已经编写了一个自定义字段验证函数,该函数可以通过"vtype"属性访问。当函数位于用于字段验证的本地文件中时,它们可以正常工作。
例如,在我想检查文本字段值是否为英文的vtype中,下面的代码工作正常
在创建表单的同一文件中使用验证
//create a custom vtype for english text fields
var engTest = /^[a-zA-Z0-9s]+$/;
Ext.apply(Ext.form.field.VTypes, {
// vtype validation function
eng: function(val, field) {
return engTest.test(val);
},
// vtype Text property: The error text to display when the validation function returns false
engText: 'Write it in English Please',
// vtype Mask property: The keystroke filter mask
engMask: /[a-zA-Z0-9_u0600-u06FFs]/i
});
.
.
layout: 'form',
border: false,
items: [{
xtype: 'textfield',
fieldLabel: 'Title (en)',
name: 'title',
vtype: 'eng',
msgTarget: 'under',
.
.
.
问题是当我想在整个项目表单中全局使用这些函数时,我不能再将它们用于表单字段验证了我有一个文件名Utility,我在其中将全局函数定义为静态变量。
Utilities.js文件中的全局静态函数
var statics = {
/*
these are js functions can be used all over the project
*/
func1: function(input) {
},
func2: function(input) {
},
.
.
.
valEng: function(val) {
var engTest = /^[a-zA-Z0-9s]+$/;
Ext.apply(Ext.form.field.VTypes, {
// vtype validation function
eng: function(val, field) {
return engTest.test(val);
},
// vtype Text property: The error text to display when the validation function returns false
engText: 'Write it in English Please',
// vtype Mask property: The keystroke filter mask
engMask: /[a-zA-Z0-9_u0600-u06FFs]/i
});
}
};
Ext.define('smp.utility.Utilities', {
alternateClassName: 'smp.Utilities',
statics: statics
});
在表单中调用自定义定义的vtype
layout: 'form',
border: false,
items: [{
xtype: 'textfield',
fieldLabel: 'Title (en): ',
name: 'title_en',
vtype: smp.Utilities.valEng(this.getValue()),
msgTarget: 'under',
.
.
.
},
.
.
.
.
我多次修改代码,但无法通过调用smp.Utilities.valEng(this.getValue())
您可以在一个单独的文件中定义您的自定义Vtype,该文件可以全局使用类似的东西。
Ext.define('MyApp.overrides.form.field.VTypes', {
override: 'Ext.form.field.VTypes',
eng: function(val, field) {
return engTest.test(val);
},
engText: 'Write it in English Please',
engMask: /[a-zA-Z0-9_u0600-u06FFs]/i,
phoneText: 'This is not a valid phone number',
phoneMask: /[d-+()s./\]/,
phoneRe: /^[d-+()s./\]{5,20}$/,
phone: function(v) {
return this.phoneRe.test(v);
}
});
确保您的应用程序需要它。
Ext.define('MyApp.Application', {
extend: 'Ext.app.Application',
requires: [
'MyApp.overrides.form.field.VTypes'
],
...
launch: function() {
...
}
});
您可以在任何您喜欢的地方自由使用vtype eng
。
{
xtype: 'textfield',
fieldLabel: 'Title (en): ',
name: 'title_en',
vtype: 'eng',
msgTarget: 'under'
}
您应该使用验证类型名称来使用自定义Vtypes(http://docs.sencha.com/extjs/5.1/5.1.0-apidocs/#/api/Ext.form.field.Text cfg vtype)
在你的情况下,它应该是
layout: 'form',
border: false,
items: [{
xtype: 'textfield',
fieldLabel: 'Title (en): ',
name: 'title_en',
vtype: 'eng',
msgTarget: 'under',
.
.
.
},