在尝试验证由对象集合组成的视图模型时,我看到了意外行为validatedObservable
;实际上,嵌套集合。
首先,让我指出我的演示行为的 JSFiddle:http: //jsfiddle.net/cbono/ZTXB9/8/
我的视图模型是一个App
对象。它包含单个属性Services,它是Service
对象的集合。每个 Service 都包含一个Retailers属性,您猜对了,它是Retailer
对象的集合。每个对象都被实例化为validatedObservable,以便我可以调用isValid
顶级对象并查找子对象中的任何/所有错误。
当我初始化库时,我使用:
ko.validation.init({
grouping: {
deep: true,
observable: true
}
});
我唯一有效的验证规则是针对零售商对象。如果选择了零售商并且零售商的名称是“Other” ( (IsSelected() && IsOther()) === true
),则需要OtherDesc属性。就是这样。否则,零售商有效。
当我测试规则时(选中“其他”复选框之一并将随附的描述字段留空),验证按预期失败。但是,视图模型的errors
集合包含以下内容:
[undefined, undefined, "This field is required"]
self.errors.showAllMessages()
此外,当被调用时,我在 JS 控制台上收到此错误:
Uncaught TypeError: Object function d(){if(0<arguments.length)
{if(!d.equalityComparer||!d.equalityComparer(c,arguments[0]))d.H(),c=arguments[0],d.G();return this}b.r.Wa(d);return c}
has no method 'isModified'
我很确定这两个问题是相关的,但我无法拼凑出幕后发生的事情。似乎当验证库遍历对象图时,它获取了不正确类型的对象(因此没有方法),因此在错误集合中IsModified
放置了一堆undefined 。
我没有按预期使用图书馆吗?我正在努力让它发挥作用,因为我真的很喜欢模型验证的想法。在 jquery.validate 之类的东西中重新创建这个验证会复杂得多。