2012-04-13 4 views
13

In allen 'modernen' Browser die folgenden Werke aber nicht in IE8:Verwendung von Knockout-Vorlagen mit IE8

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

Ich erhalte die folgende Fehlermeldung:

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 }

Es scheint die zu sein, Einfügung der if-Anweisung in die Vorlagendefinition. Wenn ich das Markup der folgenden ändern, ist IE8 glücklich:

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

Warum eine if Aussage in meiner Vorlage tut nicht einschließlich in IE8 arbeiten?

Antwort

33

Ältere IE-Versionen können wählerisch sein, wenn JavaScript-reservierte Wörter für Eigenschaftsnamen verwendet werden. Wenn Sie die if wie 'if' angeben, dann wird es Ihnen gut gehen. Wie:

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

Oder so etwas wie <label data-bind="attr : { 'for': id }"></label>

+0

Yep. Das hat es behoben. Danke, Ryan. –

+2

Ich könnte dies hier als Q & A hier, aber nur für den Moment, nur weil ich gerade 5 Stunden versucht, dies herauszufinden ... Wenn Sie Probleme mit IE8 und KO-Vorlagen haben, stellen Sie sicher, Ihre tatsächliche Vorlage ist nicht in jedem ko wenn Blöcke. Ich hatte meine Vorlagen in verschiedenen Teilen der Seite und hatte nur Probleme in IE8. Bewegte sie alle an die Spitze des Körpers, jetzt funktioniert großartig. – eselk

+0

@eselk Du hast mich mindestens 5 Stunden gerettet, indem du deinen Kommentar geschrieben hast. Vielen Dank! – Peter