Jud*_*ngo 1 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>
Run Code Online (Sandbox Code Playgroud)
这适用于IE9,Chrome,Firefox.
但是,在IE8上,我收到以下错误:
"无法解析绑定.ThisMethod未定义."
在IE8中调试这个,我看到以下信息:

它即将抛出异常,它将在渲染foo模板期间出现.
请注意,$ data未定义.这就是SomeMethod没有解决的原因; 它应该存在于$ data.SomeMethod上,但是$ data是未定义的.
为什么这会在IE8上失败?
我有完全相同的问题,并且看到你在不知道如何解决问题的情况下感到非常失望.
所以,对于未来的访客,这是我如何解决这个问题:
我用一个硬编码的数组初始化了一个foreach中使用的数组,最后是一个尾随的昏迷.
在您的示例中,这将是这样的:
viewModel.fooItems([
{SomeMethod: function () {}},
{SomeMethod: function () {}}, // <- here is the evil coma
]);
Run Code Online (Sandbox Code Playgroud)
当仔细观察时,ie8将此数组评估为3项数组,其最后一项未定义.因此未定义的$ data.
当然,具有相同的症状并不意味着你的问题是相同的,但如果它可以帮助任何人......
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |