我在viewModel中的Required validator中使用了ifIf验证器。我的要求是只有在我选择员工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>
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
这是因为即使在viewModelId
对象完成之前,验证也会在您定义后立即触发 。
避免这种情况的一种方法是在构造它所属的对象后扩展observable:
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
}
});