2012-10-26 16 views
6

このノックアウト2.1のバインディング式はFirefoxとIE9ではうまく動作しますが、IE8互換モードでエラー ""、識別子:文字列または文字列 ":IEより9より前のバージョンのIEでエラーが発生しました

<div data-bind="template: { 
    if: myDataModel, 
    data: myDataModel, 
    afterRender: setup(myDataModel) }"> 

Iは、デバッガの下で実際の場所を見つけ、それがコード(ノックアウト-2.1.0.debug.js)のこのラインは次のとおり

return new Function("sc", functionBody) 

functionBodyは、上記の式に等しい文字列です。スペースやキャリッジリターン文字で試してみましたが、何も役に立ちません。同じ結果:IE9互換モード以外のブラウザでも正常に動作します。

ご意見はありますか?

答えて

12

IEの古いバージョンでは、「if」や類似の予約語がプロパティ名として表示されないことが問題だと思います。プロパティ名を一重引用符で囲みます。

<div data-bind="template: { 
'if': myDataModel, 
data: myDataModel, 
afterRender: setup(myDataModel) }"> 

"クラス"バインディングがあるときにこれを行う一般的なもう1つの時間が発生します。同じ修正:JSでの予約語の

<tr data-bind="attr: { 'class': packageSelected() ? 'success' : '' }"> 

一覧:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

+0

あなたは全く正しいですが、今式に ' 'if''とそれが正常に動作します。 Knockout.jsのドキュメントでは、Webサイトhttp://knockoutjs.comの 'if'ステートメントのすべてのサンプルが引用されていませんが、フレームワークはIE6 +から正しく動作しないと宣言していますが、 – YMC

+1

@YMC:内部でノックアウトは、バインディング内のすべてのトップレベルプロパティがクォートされることを保証します。ネストされたオブジェクトリテラルでは同じことはできません。そのため、通常のノックアウトの 'if'バインディングは問題なく動作するように見えます。これらのオブジェクトのプロパティ名をクォートするだけでよいでしょう。 –

+0

@Jeff Mercado私が見ているが、私の不満はエラーメッセージの欠如ではなく、自分のWebサイトにある自分のサンプルを引用していないということでした。 – YMC

関連する問題