2012-04-13 20 views
13

En todos 'moderna' Navegadores las siguientes obras pero no en Internet Explorer 8:El uso de plantillas knockout condicionales con IE8

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

me sale el siguiente error:

SCRIPT5022: Unable to parse bindings. Message: SyntaxError: Expected identifier, string or number; Bindings value: template: {if: $root.itemToEdit.SomeObject() === $data, name: 'EditItemTemplate', afterRender: $root.initializeEditPanel }

parece ser el inclusión de la declaración if dentro de la definición de la plantilla. Si cambio el marcado a lo siguiente, IE8 es feliz:

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

¿Por qué incluir una declaración if en mi plantilla no funciona en IE8?

Respuesta

33

Las versiones anteriores de IE pueden ser exigentes con el uso de palabras reservadas de JavaScript para los nombres de las propiedades. Si especifica el if como 'if', entonces estará bien. Al igual que:

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

O algo así <label data-bind="attr : { 'for': id }"></label>

+0

Sip. Eso lo solucionó Gracias, Ryan. –

+2

Podría publicar esto como preguntas y respuestas aquí, pero por ahora, solo porque acabo de pasar 5 horas tratando de resolver esto ... si tienes problemas con las plantillas IE8 y KO, asegúrate de que tu plantilla real no esté dentro de ningún ko. si bloques. Tenía mis plantillas en varias partes de la página y solo tenía problemas en IE8. Los movió a todos a la parte superior del cuerpo, ahora funciona muy bien. – eselk

+0

@eselk Me salvaste al menos 5 horas con solo escribir tu comentario. ¡Gracias! – Peter

Cuestiones relacionadas