我有一个动态呈现的视图。它可能有一些输入或可能没有。
在用户填写所有内容并尝试发送数据后,我致电this.model.isValid(true)
(或this.model.isValid()
),即使输入数据有效,也会返回false
。
我认为原因是Backbone Validation尝试验证我们未呈现的输入的属性。
如果我们没有视图的sticked元素,是否有任何跳过模型属性的解决方案?
更新
我的 模型 与此类似:
MyApp.module("RecordModel", function (RecordModel, MyApp, Backbone) {
RecordModel.recordModel = Backbone.Model.extend({
validation: {
inn: {
pattern: 'inn',
msg: MyApp.messages.inn
},
bik: {
pattern: 'bik',
msg: MyApp.messages.bik
},
uin: {
pattern: 'uin',
msg: MyApp.messages.uin
},
sum: {
pattern: 'sum',
msg: MyApp.messages.sum
}
}
});
});
绑定:
bindings: {
'#uin': {
observe: 'uin',
setOptions: {
validate: true
},
events: MyApp.Validation.events.inputEvents
},
'#bik': {
observe: 'bik',
setOptions: {
validate: true
},
events: MyApp.Validation.events.inputEvents
},
'#inn': {
observe: 'inn',
setOptions: {
validate: true
},
events: ParkingMate.Validation.events.inputEvents
},
'#sum': {
observe: 'sum',
setOptions: {
validate: true
},
events: MyApp.Validation.events.inputEvents
}
}
因此,出于某种原因,我们不会渲染#sum
输入。因为我们没有进入我们的DOM,它在RecordModel
中不存在,但是主干仍然试图验证它。或者如果我们在DOM中有这个输入,那么一切正常。
答案 0 :(得分:1)
How can I allow empty values but still validate if the user enters something?
默认情况下,如果为属性配置验证器,则为 认为必要。但是,如果要允许空值和 仍然会在输入内容时验证,添加
required: false
除了其他验证器。validation: { value: { min: 1, required: false } }
如果您不能允许空值(如创建时),Backbone.validation overrides isValid
会在默认行为中添加功能。有趣的是我们可以传递的数组参数:
// Check if name and age are valid var isValid = model.isValid(['name', 'age']);
有了这个,我们就可以只验证模型中存在的字段:
model.isValid(_.keys(model.attributes));