我正在使用Knockout Validation插件(https://github.com/Knockout-Contrib/Knockout-Validation)来验证我的视图模型但已运行
涉及已动态添加到视图模型的属性的问题。当您在
上调用有效时,它们基本上会被忽略查看模型。
var myViewModel = ko.validatedObservable({
property1: ko.observable().extend({ required: true }),
property2: ko.observable().extend({ max: 10 })
});
myViewModel()["property3"] = ko.observable().extend({ required: true });
console.log(myViewModel.isValid()); //false
myViewModel().property1('something');
myViewModel().property2(9);
console.log(myViewModel().property3.isValid()); //false
console.log(myViewModel.isValid()); //true
上面的代码创建了一个包含2个属性的模型,然后添加了第三个。在第3个属性上调用isValid会返回false,但是当您调用
时 模型上的isValid似乎忽略了第3个属性并返回true。
任何想法如何扩展模型并且验证仍然有效?
答案 0 :(得分:1)
当您使用ko.validatedObservable时,库将遍历您的viewModel并使用验证使每个属性成为isValid的依赖项。由于之后添加了属性,因此不会将其作为依赖项添加到validatedObservable isValid标志。
您可以使用的是用于延迟创建isValid函数的组功能。 (https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Validating-Only-Specific-Observables)
实施例
var myViewModel = {
property1: ko.observable().extend({ required: true }),
property2: ko.observable().extend({ max: 10 })
};
myViewModel()["property3"] = ko.observable().extend({ required: true });
ko.validation.group(myViewModel());
console.log(myViewModel().isValid());
上面的代码将在视图模型中创建所有可验证的observable的分组。它还将在视图模型上创建isValid函数。
以下是该功能来源的链接,以便您更好地了解它正在做什么:https://github.com/Knockout-Contrib/Knockout-Validation/blob/master/Src/api.js#L132