使用 Backbone.Validation 跳过模型属性验证
Skip validation of model attribute using Backbone.Validation
我有一个动态呈现的视图。它可能有一些输入,也可能没有。
在用户填写所有内容并尝试发送数据后,我调用 this.model.isValid(true)
(或 this.model.isValid()
)并且它 returns 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
中不存在它,但 backbone 仍会尝试验证它。或者,如果我们在 DOM 中有此输入,一切正常。
How can I allow empty values but still validate if the user enters something?
By default, if you configure a validator for an attribute, it is
considered required. However, if you want to allow empty values and
still validate when something is entered, add required: false
in
addition to other validators.
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));
我有一个动态呈现的视图。它可能有一些输入,也可能没有。
在用户填写所有内容并尝试发送数据后,我调用 this.model.isValid(true)
(或 this.model.isValid()
)并且它 returns 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
中不存在它,但 backbone 仍会尝试验证它。或者,如果我们在 DOM 中有此输入,一切正常。
How can I allow empty values but still validate if the user enters something?
By default, if you configure a validator for an attribute, it is considered required. However, if you want to allow empty values and still validate when something is entered, add
required: false
in addition to other validators.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));