1

我有一个名为 ReclaimTotalAmount 的字段,它显示来自 ac# 模型的值。

<div class="container-left">
Reclaim Total: <span data-bind='text: model.ReclaimTotalAmount'></span>
</div>

我还有一个显示字段总和值的字段:

 <div class="container-left">
    Countered Total:<span data-bind='text: model.CounteredTotalAmount'></span>
</div>

要获得 CounteredTotalAmount 我使用以下

self.model.CounteredTotalAmount = ko.computed(function () {
    var SumCounterTotals = 0;

    for (var i = 0; i < self.model.CounterReclaimViewModels().length; i++) {
        SumCounterTotals += (
           parseFloat(self.model.CounterReclaimViewModels()[i].CounteredTimeAmount())
         + parseFloat(self.model.CounterReclaimViewModels()[i].CounteredMileAmount())
         + parseFloat(self.model.CounterReclaimViewModels()[i].CounteredAppurtenanceAmount())
     )
    }

所以我需要检查天气计数器总数是否大于 ReclaimTotal。我试过这个:我创建了一个扩展

 self.model.CounteredTotalAmount.extend({
    greaterThan: { params: self.model.ReclaimTotalAmount, message: "Car number high must be greater than the low." }
});

那么这就是功能

 ko.validation.rules['greaterThan'] = {
    validator: function (val, other) {
        if (val != null && val != "" && other != null) {
            var first = parseInt(val);
            var second = parseInt(ko.unwrap(other));
            if (!isNaN(first) && !isNaN(second)) {
                return first > second;
            }
        }
        return true;
    },
    message: 'Must be greater than or equal to the other value'
};

除验证外,一切正常。如果 Countered Total 大于 Reclaim 总数,我将无法生成错误消息...谢谢

4

1 回答 1

1

多件事情可能会出错,但由于您没有发布完整的示例代码片段,您需要检查以下内容:

  1. 因为您正在创建一个自定义验证器,所以您需要ko.validation.registerExtenders();在第一次使用它之前调用它。
  2. KO.extend({ })返回扩展的 observable,因此您需要使用结果覆盖现有属性:

    self.CounteredTotalAmount = self.CounteredTotalAmount.extend({
        greaterThan: {
           params: self.ReclaimTotalAmount,
           message: "Car number high must be greater than the low."
        }
    });
    
  3. 因为 KO 验证只覆盖了valueandchecked绑定来自动显示错误信息。所以你需要使用validationMessage绑定来显示你的错误,因为你在text这里使用绑定:

    <div class="container-left">
         Countered Total:<span data-bind='text: CounteredTotalAmount'></span>
         <span data-bind="validationMessage: CounteredTotalAmount"></span>
    </div>
    

这是一个工作JSFiddle与您的代码的简化版本。

于 2013-09-16T19:15:23.247 回答