Knockout需要验证的错误只有If-不能读取未定义的属性

时间:2014-09-09 23:09:45

标签: knockout.js

我在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>

非常感谢任何帮助。谢谢!

1 个答案:

答案 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
    }
});