2012-04-13 17 views
13

W sumie „nowoczesny” przeglądarek następujące prace ale nie w IE8:Stosując warunkowe szablony pucharowej z IE8

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

pojawia się następujący błąd:

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 }

wydaje się być dołączenie instrukcji if do definicji szablonu. Jeśli zmienię znaczników do dalszej IE8 jest zadowolony:

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

Dlaczego w tym oświadczenie w moim szablonu nie pracuje w IE8 if?

Odpowiedz

33

Starsze wersje IE mogą być wybredne przy użyciu słów zastrzeżonych JavaScript dla nazw właściwości. Jeśli podasz if, taki jak 'if', wszystko będzie dobrze. Jak:

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

Albo coś <label data-bind="attr : { 'for': id }"></label>

+0

Yep. To naprawiło to. Dzięki, Ryan. –

+2

Mogę opublikować to jako Q & A tutaj, ale na razie, tylko dlatego, że spędziłem 5 godzin próbując to zrozumieć ... jeśli masz problemy z szablonami IE8 i KO, upewnij się, że twój aktualny szablon nie znajduje się w żadnym ko jeśli bloki. Miałem szablony w różnych częściach strony i miałem problemy tylko w IE8. Przeniesiono je wszystkie na wierzch ciała, teraz pracują świetnie. – eselk

+0

@eselk Uratowałeś mnie co najmniej 5 godzin, pisząc swój komentarz. Dziękuję Ci! – Peter