Подтвердить что ты не робот

Использование условных шаблонов нокаута с IE8

Во всех современных браузерах работает , но не в IE8:

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

Я получаю следующую ошибку:

SCRIPT5022: Невозможно проанализировать привязки. Сообщение: SyntaxError: ожидается идентификатор, строка или номер; Значение привязки: template: {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?

4b9b3361

Ответ 1

Старые версии IE могут быть разборчивыми относительно использования зарезервированных слов JavaScript для имен свойств. Если вы укажете if как 'if', тогда все будет в порядке. Как:

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

Или что-то вроде <label data-bind="attr : { 'for': id }"></label>