我正在尝试使用Backbone验证Backbone验证,我希望在用户输入时一次验证一个属性。但是,当用户输入值时,模型上的所有属性都会得到验证,而不仅仅是用户已更改的属性。我做错了什么?
我的观点:
bindings:{
'#username' : {
observe:'username',
setOptions: {
validate:true
}
},
'#email' : {
observe:'email',
setOptions: {
validate:true
}
},
'#firstname' : {
observe:'firstName',
setOptions: {
validate:true
}
},
.......
onShow: function(){
Backbone.Validation.bind(this, {
valid: function(view, attr) {
alert('VALID - ' + attr);
},
invalid: function(view, attr, error) {
alert('INVALID - ' + attr);
}
});
this.stickit();
},
答案 0 :(得分:3)
在模型(1)中设置值时,会使用您通过setOptions
的所有内容。当您将validate: true
传递给Backbone模型的set函数时,它将验证模型中的值以及传递给set函数(2)的值,这意味着它将在每次设置时验证整个模型导致您现在遇到的问题的新值。你没有做错任何事。
您可以通过将验证分成多个单独的函数并仅在属性更改时调用所需的函数然后更改validate函数来调用所有这些单独的函数来验证整个模型来解决此问题。
答案 1 :(得分:0)
这也发生在我身上。就我而言,我在模型中设置默认值为'' (空白)。删除它们并且有效
答案 2 :(得分:0)
尝试在{you}视图绑定中使用backbone.validation
forceUpdate
对象上的backbone.stickit
setOptions
参数。这对我有用,我遇到了类似的问题。
就像yousefcisco提到的那样,骨干将验证模型中的所有属性在设置或保存时,取决于您传递的选项,但在我的情况下不是我需要单独验证每个属性,但属性没有得到即使只有一个属性无效,我也会设置forceUpdate: true
,它就会发挥它的魔力。
在此处查看:http://thedersen.com/projects/backbone-validation/#configuration/force-update
答案 3 :(得分:0)
为此,您应该从模型中删除默认值(至少对于您的验证属性)