尝试让Backbone.Validation plugin正常工作。我已经宣布了我要验证的属性......
class window.Models.SearchQuery extends Backbone.Model
defaults:
city: ''
keywords: ''
lat: ''
long: ''
location: ''
performed_at: ''
region: ''
validation:
keywords:
required: true
pattern: 'number'
location:
required: true
pattern: 'number'
(我将位置设置为仅用于测试的数字) 然后在Chrome开发工具...
s = new Meg.Models.SearchQuery({validate:true})
s.set({'location': ''})
s.isValid()
// true
它总是通过验证..
将验证混合到模型中,其他所有内容都相同(如上所述)。
class App.Routers.AppRouter extends Backbone.Router
initialize: ->
_.extend(Backbone.Model.prototype, Backbone.Validation.mixin)
s = new App.Models.SearchQuery({validate:true})
//returns object..
m.set({'location': 'ewf3ef3ref3rf'})
//returns object with changed attrs
m.isValid('location')
//TypeError: Cannot call method 'call' of undefined
答案 0 :(得分:1)
假设您正确设置了mixin:
_.extend(Backbone.Model.prototype, Backbone.Validation.mixin)
使用Backbone.Validation时,您需要明确传递true
以强制验证整个模型。 (是的,它与Backbone的内置功能不一致)。
从the code可以看出,isValid
方法返回缓存的验证状态,如果没有明确告知验证所有属性或数组或单个属性。
s.isValid(true);
或者,例如:
s.isValid("location");
答案 1 :(得分:1)
第三方lib可能会破坏它。
我今天有同样的症状。 Mixin set,验证集但model.isValid(true)返回true。调试后我发现Backbone.Validation使用下划线_.without函数(当它获得模型的验证规则时),它调用深度Array.indexOf中的某个地方,被Stylish Select(http://github.com/sko77sun/Stylish-Select)覆盖没有函数返回的方法总是返回空数组[]。这使得Backbone.Validation将我的模型视为没有设置验证规则,这就是为什么我的模型的任何状态验证为真。