13

すべての「最新の」ブラウザでは、次の機能が動作しますが、IE8では機能しません。

<!-- ko template: {if: $root.itemToEdit.SomeObject() === $data, name: 'EditItemTemplate', afterRender: $root.initializeEditPanel } -->
<!-- /ko -->

次のエラーが発生します。

SCRIPT5022:バインディングを解析できません。メッセージ:SyntaxError:予期された識別子、文字列、または数値。バインディング値:テンプレート:{if:$ root.itemToEdit.SomeObject()=== $ data、name:'EditItemTemplate'、afterRender:$ root.initializeEditPanel}

ifテンプレート定義内にステートメントが含まれているようです。マークアップを次のように変更すると、IE8は満足します。

<!-- ko if: $root.itemToEdit.SomeObject() === $data -->
   <!-- ko template: {name: 'EditItemTemplate', afterRender: $root.initializeEditPanel } -->
   <!-- /ko -->
<!-- /ko -->

ifテンプレートにステートメントを含めることがIE8で機能しないのはなぜですか?

4

1 に答える 1

33

古いバージョンの IE では、プロパティ名に JavaScript の予約語を使用することにこだわりがある場合があります。iflikeを指定すれば'if'大丈夫です。お気に入り:

<!-- ko template: {'if': $root.itemToEdit.SomeObject() === $data, name: 'EditItemTemplate', afterRender: $root.initializeEditPanel } -->
<!-- /ko -->

または次のようなもの<label data-bind="attr : { 'for': id }"></label>

于 2012-04-13T12:52:49.520 に答える