【问题标题】:Difference between validation of observableArray vs regular observableobservableArray 验证与常规 observable 验证之间的区别
【发布时间】:2014-12-08 14:27:52
【问题描述】:

使用淘汰赛验证我正在尝试对一个可观察数组应用一些简单的验证,以检查它至少有 n 个项目。

我创建了一个简单的测试验证规则

ko.validation.rules['minSelected'] = {
    validator: function (val, minimum) {
        var result = (val.length >= minimum);
        console.dir(result);
        return result;
    },
    message: 'This field requires at least {0} selected items.'
};

我将其应用于我的模型

self.contacts = ko.observableArray().extend({ minSelected: 1 });

验证器函数被调用,我可以通过console.dir() 调用看到正确的验证结果,但结果似乎不会影响验证过程。

我还尝试创建一个始终为假的验证器,它在标准 observable 上完美运行,但在 observableArray 上不起作用。

ko.validation.rules['never'] = {
    validator: function (val, param) {
        return false;
    },
    message: 'I will never be valid.'
};

self.single = ko.observable().extend({ never: 'ever' });
self.multiple = ko.observableArray().extend({ never: 'ever' });

我是否遗漏了一些关于可观察数组验证的内容?

【问题讨论】:

  • +1 写得很好的问答和分享!

标签: knockout.js knockout-validation


【解决方案1】:

我解决了这个问题,所以我在这里发布答案,以防它帮助其他人。

验证似乎在工作,但没有显示任何反馈。我使用与 validating a computed field 相同的过程(添加我自己的跨度,绑定到验证消息)并且一切正常现在正如预期的那样。

这是我如何让它工作的示例标记:

<select data-bind="options: contactList, 
                   optionsText: 'text', 
                   optionsValue: 'value', 
                   selectedOptions: contacts" 
        multiple>
</select>
<span data-bind="validationMessage: contacts" class="validationMessage"></span>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2021-08-23
    • 2017-06-25
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多