1

我有一个带有错误集合的视图模型,我将其绑定到 ASP.NET MVC 样式验证摘要。问题是错误收集并不总是与模型的当前状态保持同步。

function CostEditViewModel() {
    var self = this;
    self.description = ko.observable().extend({ required: { message: "Please enter the description", params: true } });
    self.amount = ko.observable()
        .extend({ required: { message: "Please enter the amount", params: true } })
        .extend({ number: { message: "The amount is not valid", params: true } });
    self.displayErrors = ko.observable(false);
    self.errors = ko.validation.group(self);

    self.add = function() {
        self.edit(new Cost({ Description: '', Amount: '' } ));
    };

    self.edit = function(cost) {
        self.description(cost.Description());
        self.amount(cost.Amount());
        self.displayErrors(false);

        self.description.isModified(false);
        self.amount.isModified(false);
    };

    self.save = function() {
        if (self.isValid()) {
            DoAjaxSave();
        } else {
            self.displayErrors(true);
        }
    };
}

然后我将错误绑定到 UL

<div class="alert alert-error" data-bind="visible: displayErrors() && errors().length > 0">
    <ul data-bind="foreach: errors">
        <li data-bind="text: $data"></li>
    </ul>
</div>

问题是验证摘要中显示的错误并不总是最新的。如果我触发金额错误,则正确的错误在集合中,但如果我触发金额的另一个错误,即使它确实在字段旁边显示正确的错误,它也不会更改错误集合中的内容。为了获得正确的错误集合,一个字段必须在有效和无效之间更改状态。如果字段从一种无效状态更改为另一种无效状态,则错误集合不会更新。

这是我为演示示例而创建的小提琴。

http://jsfiddle.net/e4LHV/2/

4

0 回答 0