我在viewModel中的Required验证器中使用onlyIf验证器。我的要求是,只有当我选择员工id单选按钮时,才需要identifierId。我在绑定时出错-无法读取未定义的属性"selectedOptionValue"。
这是js-
var viewModelId = {
selectedOptionValue: ko.observable(),
identifierId: ko.observable().extend({
required: { message: requiredIdentifierId, onlyIf: function () { return (viewModelId.selectedOptionValue() === 'employeeid'); } },
minLength: { params: 2, message: invalidLengthId },
maxLength: 15,
pattern: {
params: patterns.identifier,
message: invalidId
}
});
这是我的HTML-
<input type="radio" value="employeeid" name="identifier" data-bind="checked: selectedOptionValue"/> <label>employee id</label>
<div data-bind="visible: selectedOptionValue() == 'employeeid'">
<input class="intro-line id-text" data-bind="value: identifierId" />
</div>
非常感谢您的帮助。谢谢
这是因为在定义验证之后,甚至在viewModelId
对象完成之前,验证都会立即触发。
避免这种情况的一种方法是在构建其所属的对象后扩展可观察对象:
var viewModelId = {
selectedOptionValue: ko.observable(),
identifierId: ko.observable()
};
viewModelId.identifierId.extend({
required: {
message: requiredIdentifierId,
onlyIf: function () {
return viewModelId.selectedOptionValue() === 'employeeid';
}
},
minLength: {
params: 2,
message: invalidLengthId
},
maxLength: 15,
pattern: {
params: patterns.identifier,
message: invalidId
}
});