使用挖空验证重新评估依赖字段上的错误消息

时间:2016-01-21 13:35:38

标签: validation knockout.js knockout-validation

所以我试图通过敲除验证进行一些验证。我创建了这个小提琴来演示我的问题:https://jsfiddle.net/utjmLhxa/7/

当我改变"数量"我已经有一个错误消息" double quantity",我希望它能更新错误信息。当验证有效时,它似乎消失了,但如果它仍然无效,它就不会更新。

是否有可能通过敲除验证来重新评估文本?如果是这样,怎么样?它似乎做了一些重新评估,因为当字段有效时错误消失。

示例:

  1. 在数量中输入2
  2. 以双倍数量输入2,显示必须至少为4的错误
  3. 在数量中输入3,双数量的错误消息仍然是 相同
  4. 在数量中输入1,双数量的错误消息消失
  5. 这里是jsfiddle代码:

    <div id="vm">
      <span>Quantity</span>
      <input type="number" data-bind="value: quantity"/><br/>
      <span>Double quantity</span>
      <input type="text" data-bind="value: doubleQuantity"/>
    </div>
    
    ko.validation.registerExtenders();
    var Vm = function(){
        var self = this;
        self.quantity = ko.observable().extend({ max: 5 });
        self.doubleQuantity = ko.observable().extend({validation: {
                    validator: function (val) {
                        this.message = 'must be at least ' + self.quantity() * 2
                        return val >= 2 * self.quantity();
                    },
                    message: ''
                } });
    };
    ko.applyBindings(new Vm(), document.getElementById('vm'));
    

    使用https://knockoutjs.com/downloads/knockout-2.2.1.jshttps://cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js

1 个答案:

答案 0 :(得分:2)

如果依赖字段修改(尝试但无法使其工作),则看起来错误消息不会更新。

解决方法是触发对doubleQuantity的重新评估,通过在valueHasMutated更改时在observable上调用dependent来模拟值已更改。在VM内部和末尾添加以下内容:

self.quantity.subscribe(function(){
  self.doubleQuantity.valueHasMutated();
});

工作fiddle