2012-10-26 45 views
6

该敲除2.1绑定表达式工作Firefox和IE9下细,但崩溃在IE9兼容模式:IE版本引发错误,错误“<em>预期标识符,字符串或数字</em>““预期标识符,字符串或数字”

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

我发现实际发生下的调试器,它的这行代码(敲除2.1.0.debug.js):

return new Function("sc", functionBody) 

functionBody等于上面的表达式的字符串。我试图玩空格和回车字符 - 没有什么帮助,结果相同:除了IE9兼容模式以外,任何浏览器都能正常工作

有什么建议吗?

回答

12

我认为问题是旧版本的IE不喜欢“if”或类似的保留字显示为属性名称。尝试在属性名称周围添加单引号。

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

另一种常见的情况是,当你有“class”绑定时,会发生这种情况。同样的修正:JS的保留字

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

列表:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

+0

你是完全正确的,现在用''if''表达它工作正常。 Knockout.js文档没有提及它,它们的网站http://knockoutjs.com上的'if'语句的所有示例没有引号,尽管它们声明了IE6 +的框架作品,但似乎并非如此 – YMC

+1

@YMC:内部,淘汰赛确保引用绑定中的所有顶级属性。它不能为嵌套的对象文字做同样的事情。这就是为什么正常淘汰赛如果绑定似乎没有问题。你只需养成引用这些对象的属性名称的习惯。 –

+0

@Jeff Mercado我看到了,但是我的抱怨并不是因为缺少错误信息,而是因为缺少在自己的网站上引用“if”语句自己的示例 – YMC

相关问题