Knockout验证无法按预期工作

时间:2014-01-28 14:38:12

标签: knockout.js knockout-validation

查看文档,看起来我应该像这样使用validatedObservable

ko.validatedObservable({ id: id, name: ko.observable(name).extend({required: true}) });

但是,ko.validatedObservable定义中的以下行导致错误:

    obsv.errors.subscribe(function (errors) {
        obsv.isValid(errors.length === 0);
    });

如果我将内部对象包装在一个observable中,它就可以了。

ko.validatedObservable(ko.observable({ id: id, name: ko.observable(name).extend({required: true}) }));

我无法在jsFiddle上重现错误,但这里是示例:http://jsfiddle.net/6YMsG/。我正在使用Knockout 3.0和最新的Knockout-Validation。有什么建议?

1 个答案:

答案 0 :(得分:2)

我能够通过将observable选项设置为false来配置验证插件,从而重现异常。 (Demo)。

虽然它没有在文档中写入,但您需要设置observable: true(顺便说一下这是默认设置),以便ko.validatedObservable正常工作:

所以将配置更改为

ko.validation.init({
        grouping: {
            observable: true,
        }
    });

ko.validatedObservable(ko.observable({ id: id, name: ko.observable(name).extend({required: true}) }));并不能解决这个问题只能隐藏它(在我看来这个行为实际上是插件中的一个错误)。

因为在你的例子中:

self.id = 1;
self.name = ko.observable("blah").extend({required: true});
self.myCheck = ko.validatedObservable(ko.observable({id: self.id, name: self.name)});

名称验证仍然有效,但myCheck不会,因为它不会有错误属性,因此<span data-bind="text: myCheck.errors"></span>将始终为空。

相关问题