Knockout.js 敲除验证addClass到验证元素的父级

Knockout.js 敲除验证addClass到验证元素的父级,knockout.js,knockout-validation,Knockout.js,Knockout Validation,如何在对元素的父元素进行敲除验证时使用我的类? 我的密码在这里 <li> <label for="">Residence:</label> <select data-bind="options: passengerDocs.countries(), optionsText: 'Key', optionsCaption: 'ChooseCountry',

如何在对元素的父元素进行敲除验证时使用我的类? 我的密码在这里

<li>
    <label for="">Residence:</label>         
    <select data-bind="options: passengerDocs.countries(),
                       optionsText: 'Key', optionsCaption: 'ChooseCountry',
                       value: Passport().CountryOfResidenceName">
    </select>
</li>
但是它没有将类passengerDetails\u错误添加到li中 有什么想法吗?
谢谢

我认为你走的路是对的。我认为您不需要更改淘汰验证代码,相反,您可以为您的案例创建一个新的绑定处理程序:

ko.bindingHandlers.parentValidationElement = {
    update: function (element, valueAccessor, allBindingsAccessor) {
        var cssClass = ko.utils.unwrapObservable(valueAccessor);
        var obs = ko.utils.unwrapObservable(allBindingsAccessor()).value;

        var decorateElement = obs.isModified() && !obs.isValid();
        if (decorateElement) {
            $(element).parent().addClass(cssClass);
        } else {
            $(element).parent().removeClass(cssClass);
        }
    }
}
用法如下:

<li>
    <label for="">Residence:</label>
    <input type="text" data-bind="value: Residence, parentValidationElement: 'passengerDetails_error'" />
</li>
  • 住所:

  • Fiddle:

    您不需要更改内置的
    validationElement
    或创建一组新的计算属性。。。您可以直接在
    li
    上使用
    validationElement
    和正确的
    validationOptions
    @nemesv,而您的评论对于演示如何巧妙地实现验证方法非常有用,这是如何解决Guy Z提出的问题,即按照他的明确要求将验证类应用于父元素?您的fiddle示例只会将该类应用于li项而不是ul项,除非我遗漏了一些明显的内容?@CarlEdwards尽管我的评论显示了一个不像OP想要的那样通用的解决方案,但它仍然可能是一个很好的折衷方案,OP明确表示他想要对
    li
    元素进行验证:“但是它没有给li添加类passengerDetails\u错误任何想法?”@nemesv道歉。现在我重新阅读了op,我可以看到我错误地假设他希望类应用于
      元素,很明显他没有。我的错误!
      <li>
          <label for="">Residence:</label>
          <input type="text" data-bind="value: Residence, parentValidationElement: 'passengerDetails_error'" />
      </li>