2012-04-19 16 views
1

最近のすべてのブラウザで正常に動作するが、IE8では失敗するKnockoutJS 2.0のコードがあります。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、クロム、Firefoxの上で正常に動作します。

しかし、IE8で、私は次のエラーを取得する:それは例外をスローしようとしてい

enter image description here

、および:

IE8でこれをデバッグ

"Unable to parse bindings. SomeMethod is undefined."

、私は以下の情報を参照してくださいそれはfoo-templateのレンダリング中に起こります。

$ dataは未定義であることに注意してください。 SomeMethodが解決しないのはそのためです。 $ data.SomeMethodに存在するはずですが、$ dataは未定義です。

IE8でこれが失敗するのはなぜですか?

+0

JsFiddleは、以下のようにも私のために働きました。多分、単純化されたバージョンには何かが欠けていますか –

答えて

7

は、私はまったく同じ問題がなかったし、あなたはどのように知らなくても、あなたの問題を解決することを確認するためには非常にdisapointedでした。

ので、FUTURの訪問者のために、ここで私はこれを解決する方法である:

私は、末尾の昏睡で終わる、ハードコードされた配列とforeachの中で使用される配列を初期化していました。あなたの例では

、それはですが、次のようになります

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

もう少し近くに見て、IE8は最後の項目未定義だった3つの項目の配列としてこの配列を評価しました。したがって未定義の$データ。あなたの問題を意味するものではありません同じ症状を持つもちろん

は、同じであったが、それは誰にも役立つことができれば...

+0

この問題を解決してくれてありがとう、トーマス。私はあなたの答えとして答えています。 –

1

私はIE8とjsfiddleであなたのexampelを試みたが、何の問題

http://jsfiddle.net/mFLDv/

+0

hh。 OK。だから、単純化されたバージョンは何かが欠けている。 OK。私は問題を切り分けることができるまで、いくつかの部分を削除しようとします。ありがとう。 –

+0

私はいくつかのコードを移動し、魔法のように動作し始めました。私はKnockoutJSの非常にニッチなバグに遭遇したと思われますが、正確に何が修正されたか分からずに、言いにくいです。このフィドルに答えることに感謝して、それは私にコードを使って突進し、最終的に問題を解決しました。答えとしてマークする。 –

+0

奇妙な、それはあなたのために働いてうれしい! – Anders

関連する問題