Knockout需要带onlyIf的已验证错误-无法读取未定义的属性



我在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
    }
});

最新更新