Ember.Validations
Summary
Ember.Validations更多内容查看...
用法
需要将Ember.Validations.Mixin
集成到任何你想要添加验证的控制器上
var App.UserController = Ember.ObjectController.extend(Ember.Validations.Mixin);
需要定义一个validations对象作为控制器的一个属性,用来标识当前模型的验证规则.
对象的keys要一一映射模型的属性.如果你传入了一个JSON对象作为一个属性的值,则该值将被作为当前属性的验证规则.
如果你传入了true
,则该属性将被标记为需要被验证的.如下:
App.UserController.reopen({
validations: {
firstName: {
presence: true,
length: { minimum: 5 }
},
age: {
numericality: true
},
profile: true
}
});
校验器
当前已经支持的校验器如下所示
Absence
验证属性值是null
,undefined
或者是 ''
.
Options
true
- 设置为true
将激活控制校验并且使用默认提示信息message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息
// Examples
absence: true
absence: { message: 'must be blank' }
Acceptance
默认可被接受的值为'1'
, 1
, and true
.
Options
true
- 设置为true
将激活控制校验并且使用默认提示信息message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息accept
- 可被接受的值
// Examples
acceptance: true
acceptance: { message: 'you must accept', accept: 'yes' }
Confirmation
相同值校验
Options
true
- 设置为true
将激活控制校验并且使用默认提示信息message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息
// Examples
confirmation: true
confirmation: { message: 'you must confirm' }
Exclusion
排除校验
Options
message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息allowBlank
- 如果设置为true
,值为空将跳过校验in
- 被允许的数组range
- 区间
// Examples
exclusion: { in: ['Yellow', 'Black', 'Red'] }
exclusion: { range: [5, 10], allowBlank: true, message: 'cannot be between 5 and 10' }
Format
正则,格式化校验
Options
message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息allowBlank
- 如果设置为true
,值为空将跳过校验with
- 正则表达式
// Examples
format: { with: /^([a-zA-Z]|\d)+$/, allowBlank: true, message: 'must be letters and numbers only' }
Inclusion
被允许的值 熬过校验
Options
message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息.allowBlank
- 如果设置为true
,值为空将跳过校验in
- 被允许的数组range
- 区间
// Examples
inclusion: { in: ['Yellow', 'Black', 'Red'] }
inclusion: { range: [5, 10], allowBlank: true, message: 'must be between 5 and 10' }
Length
定义属性的长度
Options
number
- 跟is
作用一样,长度必须时指定值array
- 数组里面有两个值,第一个元素代表最小值,第二个元素达标最大值,即长度的区间allowBlank
- 如果设置为true
,值为空将跳过校验minimum
- 被允许的最小长度maximum
- 被允许的最大长度is
- 跟number
作用一样,长度必须时指定值tokenizer
- 校验时执行的自定以函数,返回一个代表长度的对象
Messages
tooShort
- 当不满足最小长度验证规则时,该错误信息将被应用显示,可覆盖默认的提示信息tooLong
- t当不满足最大长度验证规则时,该错误信息将被应用显示,可覆盖默认的提示信息wrongLength
- 当校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息
// Examples
length: 5
length: [3, 5]
length: { is: 10, allowBlank: true }
length: { minimum: 3, maximum: 5, messages: { tooShort: 'should be more than 3 characters', tooLong: 'should be less than 5 characters' } }
length: { is: 5, tokenizer: function(value) { return value.split(''); } }
Numericality
校验是否是一个数值
Options
true
-设置为true
将激活控制校验并且使用默认提示信息allowBlank
- 如果设置为true
,值为空将跳过校验onlyInteger
- 只能是整数greaterThan
- 一定要大于指定数greaterThanOrEqualTo
- 一定要大于等于指定数equalTo
- 一定要等于指定数lessThan
- 一定要小于指定数lessThanOrEqualTo
- 一定要小于等于指定数odd
- 一定是奇数even
- 一定是偶数
Messages
greaterThan
-当大于校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息greaterThanOrEqualTo
- 当大于等于校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息equalTo
- 当等于校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息lessThan
- 当小于校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息lessThanOrEqualTo
- 当小于等于校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息odd
- 当奇数校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息even
- 当偶数校验失败时,该错误信息将被应用显示,可覆盖默认的提示信息
// Examples
numericality: true
numericality: { odd: true, messages: { odd: 'must be an odd number' } }
numericality: { onlyInteger, greaterThan: 5, lessThanOrEqualTo : 10 }
Presence
非空校验null
, undefined
, or ''
Options
true
- 设置为true
将激活控制校验并且使用默认提示信息message
- 错误提示信息,可以如果提供了,将会覆盖默认的提示信息
// Examples
presence: true
presence: { message: 'must not be blank' }
Uniqueness
尚未实现
URL
校验是否是一个URL.
Options
allowBlank
- 如果设置为true
,值为空将跳过校验allowIp
- 如果设置为true
,将使用IP地址进行校验URL,IP地址默认是非法的allowUserPass
- 如果设置为true
,将校验URL是否有用户名和密码,默认情况是不允许用户名和密码allowPort
- 如果设置为true
,将校验URL是否带有端口号,默认情况是不允许有端口号domainOnly
- 如果设置为true
,将校验URL是否时主域名和子域名.protocols
- 可被接受的协议数组,默认为http
,https
// Examples
url { allowUserPass: true }
url { allowBlank: true, allowIp: true, allowPort: true, protocols: ['http', 'https', 'ftp'] }
url { domainOnly: true }
Conditional Validators
每个校验器都可以带有一个if
或者 一个unless
.条件判断.
// function form
firstName: {
presence: {
if: function(object, validator) {
return true;
}
}
}
// string form
// if 'canValidate' is a function on the object it will be called
// if 'canValidate' is a property object.get('canValidate') will be called
firstName: {
presence: {
unless: 'canValidate'
}
}
Running Validations
当对象被创建时,校验器将自动运行,以及每个属性改变时,也将自动校验.
isValid
状态将被冒泡,并且帮助确定直接父级的校验状态
isInvalid
状态同样可以被获取
如果你想强制校验所有,只要在对象上调用.validate()
方法.
isValid
将被设置为true
或者false
.所有校验的运行将返回promise,所以不是调用完validate
方法,就是马上校验完毕的.
validate
方法返回一个promise,可以调用then
方法添加完成后的回调
user.validate().then(function() {
user.get('isValid'); // true
user.get('isInvalid'); // false
})
Inspecting Errors
当一个对象集成Ember.Validations.Mixin
后,该对象将同时拥有一个errors
对象,所有校验的错误信息
将被放置在该对象上.
App.User = Ember.Object.extend(Ember.Validations.Mixin, {
validations: {
firstName: { presence: true }
}
});
user = App.User.create();
user.validate().then(null, function() {
user.get('isValid'); // false
user.get('errors.firstName'); // ["can't be blank"]
user.set('firstName', 'Brian');
user.validate().then(function() {
user.get('isValid'); // true
user.get('errors.firstName'); // []
})
})
i18n
国际化I18n默认包含以下的keys
Ember.I18n.translations = {
errors:{
inclusion: "is not included in the list",
exclusion: "is reserved",
invalid: "is invalid",
confirmation: "doesn't match {{attribute}}",
accepted: "must be accepted",
empty: "can't be empty",
blank: "can't be blank",
present: "must be blank",
tooLong: "is too long (maximum is {{count}} characters)",
tooShort: "is too short (minimum is {{count}} characters)",
wrongLength: "is the wrong length (should be {{count}} characters)",
notANumber: "is not a number",
notAnInteger: "must be an integer",
greaterThan: "must be greater than {{count}}",
greaterThanOrEqualTo: "must be greater than or equal to {{count}}",
equalTo: "must be equal to {{count}}",
lessThan: "must be less than {{count}}",
lessThanOrEqualTo: "must be less than or equal to {{count}}",
otherThan: "must be other than {{count}}",
odd: "must be odd",
even: "must be even"
}
}