【问题标题】:Validate observables within a collection using Knockout Validation使用 Knockout Validation 验证集合中的 observables
【发布时间】:2013-04-20 05:37:40
【问题描述】:

我有一个消息字段和people 集合被绑定在一个无序列表中,每个都带有一个颜色下拉列表和一个默认选择。

消息字段的验证有效,删除文本并显示错误并且错误计数增加。但是,当您将下拉条目之一更改为“选择..”(实际上取消选择该选项)时,您会正确收到“此字段是必需的”消息,但 errors 对象似乎没有更新。它显然与它是一个集合的事实有关吗?当您按下提交按钮或查看跨度数据绑定时,请了解我的意思。

我还需要验证以启动动态添加的行,因此当您按下“添加另一行”时,我也需要增加错误对象。

http://jsfiddle.net/goneale/TJGS3/

有人可以看看这个并帮助我吗?

【问题讨论】:

    标签: javascript knockout.js knockout-validation


    【解决方案1】:

    更新: 使用最新版本的验证库,您可以使用 live: true 选项让它监听 observableArrays

    grouping: { deep: true, observable: true, live: true }
    

    http://jsfiddle.net/fYrbt/29/

    旧答案:

    遗憾的是,当插入新项目时,该组没有得到重新评估。订阅数组并显式执行。

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

    http://jsfiddle.net/fYrbt/

    【讨论】:

    • 实际上,仅添加这一行 ko.validation.init({ grouping: { deep: true } }); 完全解决了我的所有问题,并且允许重新评估新项目。如果我使用您还指定的 observable: true 部分,它没有。我会给你重点:)
    • @Anders 如何强制组在组中的每个项目更改时重新评估,而不是在每次更改数组项目时重新初始化它?谢谢!
    猜你喜欢
    • 2016-09-25
    • 2015-11-23
    • 2014-09-08
    • 1970-01-01
    • 2013-03-31
    • 2012-12-02
    • 2014-04-16
    • 2013-12-26
    • 2014-05-24
    相关资源
    最近更新 更多