使用IE8的条件淘汰模板

时间:2012-04-13 11:48:50

标签: templates internet-explorer-8 cross-browser knockout.js

在所有“现代”浏览器中,以下工作,但不适用于IE8:

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

我收到以下错误:

  

SCRIPT5022:无法解析绑定。消息:SyntaxError:预期   标识符,字符串或数字;绑定值:template:{if:   $ root.itemToEdit.SomeObject()=== $ data,name:'EditItemTemplate',   afterRender:$ root.initializeEditPanel}

似乎是在模板定义中包含if语句。如果我将标记更改为以下内容,IE8很高兴:

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

为什么在我的模板中包含if语句在IE8中不起作用?

1 个答案:

答案 0 :(得分:33)

较早的IE版本可以挑剔使用JavaScript保留字来表示属性名称。如果您指定if 'if',那么您会没事的。像:

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

或类似<label data-bind="attr : { 'for': id }"></label>