2012-04-19 51 views
1

我有以下KnockoutJS 2.0代码,在所有现代浏览器中都能正常工作,但在IE8上失败。KnockoutJS模板在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,我得到以下错误:

"Unable to parse bindings. SomeMethod is undefined."

在IE8调试这一点,我看到以下信息:

enter image description here

这是关于抛出异常,和它在foo-template的渲染过程中即将到来。

注意$ data是未定义的。这就是为什么SomeMethod不能解决问题;它应该存在于$ data.SomeMethod上,但是$ data没有定义。

为什么在IE8上失败?

+0

在下面的jsfiddle工作对我来说也是如此。也许简化版本缺少一些东西? – 2012-04-19 13:38:02

回答

7

我有完全相同的问题,是相当disapointed看到您解决您的问题,不知道如何。

所以,对于即将成为游客,这里是我如何解决了这个:

我已经初始化在foreach使用的硬编码阵列的方向,后面带有一个昏迷结束。

在您的例子,这将是这样的:

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

当寻找一点点接近,IE8评估了此数组作为3项数组,其最后一个项目是不确定的。因此未定义的$数据。

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

+0

谢谢你帮助解决这个问题,托马斯。我将你的标记作为答案。 – 2013-01-08 15:34:27

1

我想你的exampel中的jsfiddle与IE8,没有问题

http://jsfiddle.net/mFLDv/

+0

呵呵。好。所以简化版本缺少一些东西。好。我会尝试删除一些部分,直到我能够找出问题。谢谢。 – 2012-04-19 14:38:02

+0

我绕过一些代码,神奇地开始工作。我怀疑我偶然发现了KnockoutJS中的一个小问题,但不知道究竟是什么修复了它,这很难说。感谢您用小提琴来回答问题,这导致我无法使用代码,最终解决了问题。标记为答案。 – 2012-04-20 05:46:15

+0

奇怪,很高兴它为你工作! – Anders 2012-04-20 06:44:53