2

在我认为使用淘汰赛和所谓的淘汰赛验证的剃刀观点中,我添加了以下行(实际上开始使用 ko 验证):

<script src="@Url.Content("~/Scripts/knockout.validation.debug.js")" type="text/javascript"></script>
  • 当我在 Chrome 验证中运行此视图时,它运行良好。
  • 当我在 IE (9.0) 中运行此视图时,我收到非常丑陋的消息,内容如下:

错误信息

0x800a138f - Microsoft JScript 运行时错误:无法获取属性“规则”的值:对象为空或未定义。

(在 SO 上的未来搜索文本中)点击“继续”后,它运行良好,验证似乎工作正常。它只是这个消息。

值得一提的是,我搜索了解决方案——我没有在任何地方使用“规则”。不知道 IE 发生了什么。

有没有人知道为什么会发生以及如何消除错误?

4

1 回答 1

3

简短的回答:看起来新版本的 Knockout Validation解决了这个问题。更新您的 Knockout Validation 以解决此问题,并忘记这曾经发生过。

更长的答案:错误来自名为 isValidatable. 这是从源代码复制粘贴的:

isValidatable: function (o) {
    return o.rules && o.isValid && o.isModified;
}

正如错误所说,有人称isValidatablewhere ois "null or undefined"。如果一个对象甚至不是一个对象,它就是不可验证的!在这种情况下,我们遇到了一个错误,因为我们正在寻找o.rules,这会抛出一个错误,因为o它是 undefined 或 null。

新版本的淘汰赛验证这样做:

isValidatable: function (o) {
    return o && o.rules && o.isValid && o.isModified;
},

如果对象存在,则第一个子句返回 true(从技术上讲,它返回o,计算结果为 true)。如果对象o存在,如果未定义,则返回且不出错。

如果您好奇,这里是修复您遇到的错误的提交

于 2013-03-12T01:29:03.313 回答