2012-10-26 19 views
6

Questo ko 2.1 espressione vincolante funziona bene con Firefox e IE9, ma si blocca in modalità di compatibilità IE9 con l'errore "identificatore Previsto, stringa o un numero“:versioni di IE precedenti alla 9 genera l'errore "Previsto identificatore, stringa o un numero”

<div data-bind="template: { 
    if: myDataModel, 
    data: myDataModel, 
    afterRender: setup(myDataModel) }"> 

ho trovato luogo effettivo sotto debugger, è questa riga di codice (ko-2.1.0.debug.js):

return new Function("sc", functionBody) 

functionBody è una stringa uguale all'espressione sopra. Ho provato a giocare con spazi e caratteri di ritorno a capo - niente aiuta, stessi risultati: funziona come previsto con qualsiasi browser diverso dalla modalità di compatibilità IE9

Qualche suggerimento?

risposta

12

Penso che il problema è che le versioni precedenti di IE non gradiscono "if" o parole riservate simili da apparire come nomi di proprietà. Prova a mettere le virgolette singole attorno ai nomi delle proprietà.

<div data-bind="template: { 
'if': myDataModel, 
data: myDataModel, 
afterRender: setup(myDataModel) }"> 

Un altro momento comune in cui ciò avverrà quando si dispone di un binding "di classe". Stesso fix:

<tr data-bind="attr: { 'class': packageSelected() ? 'success' : '' }"> 

Elenco di parole riservate in JS: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

+0

Sei tutto giusto, ora con ' 'if'' nell'espressione funziona benissimo. La documentazione di Knockout.js non la menziona, tutti gli esempi per l'istruzione 'if' sul loro sito web http://knockoutjs.com dati senza virgolette, sebbene dichiarino che il framework funziona da IE6 + che non sembra essere vero – YMC

+1

@ YMC: Internamente , knockout assicura che vengano quotate tutte le proprietà di livello superiore nei binding. Non può fare lo stesso per i letterali degli oggetti nidificati. Ecco perché il normale knockout "se" sembra funzionare senza problemi. Dovrai solo prendere l'abitudine di citare i nomi delle proprietà per questi oggetti. –

+0

@Jeff Mercado Vedo, ma il mio lamentarsi non era la mancanza di messaggi di errore, si trattava della mancanza di citazioni 'if' sui propri campioni sul proprio sito web – YMC

Problemi correlati