KnockoutJS模板在IE8中不起作用,给出了绑定错误

时间:2012-04-19 05:33:04

标签: internet-explorer-8 knockout.js

我已经获得了以下KnockoutJS 2.0代码,可以在所有现代浏览器中正常运行,但在IE8上运行失败。

以下是简化代码:

<table>
   <tr>
       <td data-bind="template: { foreach: fooItems, name: 'foo-template' }></td>
       <td data-bind="template: { foreach: barItems, name: 'foo-template' }></td>
   </tr>
</table>

<script id="foo-template" type="text/html">
   <div data-bind="click: SomeMethod">
       foobar
   </div>
</script>

<script type="text/javascript">

   var viewModel = {
       fooItems: ko.observableArray(),
       barItems: ko.observableArray(),
   }
   ko.applyBindings(viewModel);

</script>

这适用于IE9,Chrome,Firefox。

但是,在IE8上,我收到以下错误:

  

&#34;无法解析绑定。 SomeMethod未定义。&#34;

在IE8中对此进行调试,我看到以下信息:

enter image description here

它即将抛出异常,它将在渲染foo模板期间到来。

请注意,$ data未定义。这就是SomeMethod无法解析的原因;它应该存在于$ data.SomeMethod上,但是$ data是未定义的。

为什么这会在IE8上失败?

2 个答案:

答案 0 :(得分:7)

我遇到了完全相同的问题,并且看到你在不知道如何解决问题的情况下感到非常失望。

所以,对于未来的游客来说,这就是我解决这个问题的方法:

我初始化了一个带有硬编码数组的foreach中使用的数组,最后是一个尾随的昏迷。

在您的示例中,看起来像这样:

viewModel.fooItems([
    {SomeMethod: function () {}},
    {SomeMethod: function () {}},   // <- here is the evil coma
]);

当仔细观察时,ie8将此数组评估为3项数组,其最后一项未定义。因此未定义的$ data。

当然,具有相同的症状并不意味着你的问题是一样的,但如果它可以帮助任何人......

答案 1 :(得分:1)

我在IE浏览器的jsfiddle中试过你的例子,没问题

http://jsfiddle.net/mFLDv/