2012-10-26 8 views
6

To nokaut 2,1 wyrażenie wiążące działa dobrze pod Firefoksem i IE9, ale awarie w trybie zgodności IE9 z błędem "Oczekiwano identyfikatora, sznurka lub numer„:IE wersje wcześniejsze niż 9 podnosi błędzie „Oczekiwano identyfikatora, łańcuch lub liczba”

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

znalazłem rzeczywiste miejsce pod debuggerem, to ta linia kodu (knockout-2.1.0.debug.js):

return new Function("sc", functionBody) 

functionBody jest ciągiem równa wyrażeniu powyżej. Próbowałem odtwarzać spacje i znaki powrotu karetki - nic nie pomaga, te same wyniki: działa zgodnie z oczekiwaniami z każdą przeglądarką inną niż tryb zgodności IE9

Jakieś sugestie?

Odpowiedz

12

Myślę, że problem polega na tym, że starsze wersje IE nie lubią "jeśli" lub podobnych zarezerwowanych słów, które pojawiają się jako nazwy właściwości. Spróbuj umieścić pojedyncze cudzysłowy wokół nazw nieruchomości.

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

Kolejny popularny czas, w którym to się stanie, gdy masz wiązanie "klasy". Sam dylemat:

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

Lista słów zastrzeżonych w JS: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

+0

Jesteś całkowicie w porządku, teraz z ' 'if'' ekspresji działa dobrze. Dokumentacja Knockout.js o tym nie wspomina, wszystkie próbki dla wyrażenia "if" na swojej stronie internetowej http://knockoutjs.com podane bez cudzysłowów, chociaż deklarują prace ramowe z IE6 +, co wydaje się nieprawdą. – YMC

+1

@YMC: Wewnętrznie , nokaut zapewnia, że ​​wszystkie właściwości najwyższego poziomu w wiązaniach są cytowane. Nie może zrobić tego samego dla literałów z zagnieżdżonymi obiektami. Dlatego normalne nokautowanie "if" wydaje się działać bez żadnych problemów. Musisz po prostu przyzwyczaić się do cytowania nazw właściwości tych obiektów. –

+0

@Jeff Mercado Widzę, ale moje narzekanie nie było spowodowane brakiem komunikatów o błędach, chodziło o brak cytowania instrukcji "if" ich własnych próbek na własnej stronie internetowej – YMC

Powiązane problemy