淘汰赛验证跳过房产

时间:2013-12-31 14:55:23

标签: knockout.js knockout-validation

我正在使用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。

任何想法如何扩展模型并且验证仍然有效?

1 个答案:

答案 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