2012-04-13 21 views
13

In tutto 'moderna' browsers i seguenti lavori ma non in IE8:Utilizzando i modelli knockout condizionali con IE8

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

ottengo il seguente errore:

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 }

sembra essere il inclusione dell'istruzione if all'interno della definizione del modello. Se cambio la marcatura a quanto segue, IE8 è felice:

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

Perché non compreso un if dichiarazione nel mio modello non funziona in IE8?

risposta

33

Le versioni precedenti di IE possono essere schizzinose sull'utilizzo delle parole riservate di JavaScript per i nomi di proprietà. Se si specifica il if come 'if', allora andrà bene. Come:

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

O qualcosa di simile <label data-bind="attr : { 'for': id }"></label>

+0

Yep. Questo l'ha risolto. Grazie, Ryan. –

+2

Potrei postare questo come Q & A qui, ma per ora, solo perché ho appena trascorso 5 ore cercando di capirlo ... se hai problemi con i modelli IE8 e KO, assicurati che il tuo modello attuale non sia all'interno di qualsiasi ko se blocchi Ho avuto i miei modelli in varie parti della pagina e stava avendo problemi solo in IE8. Li ho spostati tutti in cima al corpo, ora funziona alla grande. – eselk

+0

@eselk Mi hai salvato almeno 5 ore scrivendo il tuo commento. Grazie! – Peter

Problemi correlati