次の 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 では、次のエラーが発生します。
「バインディングを解析できません。SomeMethod が定義されていません。」
これを IE8 でデバッグすると、次の情報が表示されます。
例外がスローされようとしており、foo-template のレンダリング中に発生しています。
$data が定義されていないことに注意してください。そのため、 SomeMethod は解決されていません。$data.SomeMethod に存在する必要がありますが、$data は定義されていません。
これが IE8 で失敗するのはなぜですか?