查看文档,看起来我应该像这样使用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。有什么建议?
答案 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>
将始终为空。