2012-04-19 52 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