Использование условных шаблонов нокаута с 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?
Ответы
Ответ 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>