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



所以我正在尝试进行一些验证以使用淘汰验证。我创建了这个小提琴来演示我的问题:https://jsfiddle.net/utjmLhxa/7/

当我更改"数量"

并且我已经收到"双倍数量"的错误消息时,我希望它更新错误消息。当验证有效时,它似乎消失了,但如果仍然无效,它不会更新。

是否有可能获得挖空验证以重新评估文本?如果是这样,如何?它似乎做了一些重新评估,因为当字段有效时错误消失。

例:

  1. 在数量中输入 2
  2. 在"双精度数量"中输入 2,显示错误,表明它必须至少为 4
  3. 在数量中输入 3,双倍数量的错误消息仍然是相同
  4. 在数量中输入 1,双倍数量的错误消息消失

这是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.js 和 https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js

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

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

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

工作小提琴

最新更新