插入第一个项目后,Knockout验证消息不起作用

时间:2013-02-06 09:49:07

标签: knockout.js knockout-validation

我找不到任何解决方案,所以这是我的问题:

我已经为小型表单设置了验证,您可以在其中添加项目(observableArray,以后实际保存到DB)。

验证适用于第一项并显示验证消息,但第二次验证消息不会显示(验证本身有效,您无法添加项目)。

这就是我的所作所为:

  1. 在newSchool对象中设置验证,例如

    self.City = ko.observable(item ? item.City : '').extend(
    {
        required: true
    });
    
  2. 在MainViewModel中构建验证组

    self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true });

  3. MainViewModel中的
  4. :检查错误,否则推入集合,使用新的默认值初始化newSchool observable

    self.addSchool = function () {
        if (self.schoolErrors().length > 0) {
            self.schoolErrors.showAllMessages();
            return;
        }
        self.schools.push(self.newSchool());
        self.newSchool(new School());
        self.newSchool().load();
        self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true  }); };
    
  5. 出于调试原因,我打印出了学校对象中经验证的observable的isValid和isModified值。这些看起来很好。插入第一个项目后,isValid和isModified都返回 false

    只有问题,如上所述,不再显示任何验证消息。

    对我来说也很奇怪:我不使用自定义验证消息模板,除了一种情况,我需要针对计算字段进行验证。这显示了,但“内置”验证消息没有。

    任何想法?

2 个答案:

答案 0 :(得分:2)

如果只是在敲除验证中添加了一个pull请求,它修复了knockout.validation.group对可观察数组中的更改没有反应的问题。

https://github.com/Knockout-Contrib/Knockout-Validation/pull/223

答案 1 :(得分:0)

遗憾的是,插入新项目时,不会重新评估该组。订阅数组并明确地执行。

this.items.subscribe(function() {
     this.errors = ko.validation.group(this);
     this.errors.showAllMessages();
}, this);

http://jsfiddle.net/fYrbt/

在小提琴中,我使用Github作为CDN,所以如果小提琴不起作用等待和重新加载。