在IE 8中,下划线模板失败,出现“意外标识符”

时间:2013-05-03 14:40:39

标签: javascript internet-explorer-8 underscore.js

我们有一个Backbone / Marionette Web应用程序。该应用程序在现代浏览器中运行良好,但在IE8中随

而死
SCRIPT1010: Expected identifier

调试器指向Underscore.js库中的一行而不是我的代码。显然库中没有问题 - 我们的代码触发了这个问题。这条线就是这个

var render = new Function(settings.variable || 'obj', '_', source);

问题是什么?

1 个答案:

答案 0 :(得分:11)

事实证明,这是我们的一个模板中的特定情况,这意味着在编译模板时,代码在现代浏览器中很好,但在IE8中摇摆不定。

我们正在使用serializeData函数从我们的视图中传递数据,使用serializeData函数(coffeescript但你明白了):

...
serializeData: ->
   data = super()
   data.messages = {
      intro: "Welcome to the app"
      continue: "Click here to continue"
   }
   return data
...

然后在模板中引用它,如此

<h1>{{ messages.intro }}</h1>
<a href="...">{{ messages.continue }}</h1>

问题来自于“继续”是一个保留字。 Coffeescript非常好,允许你在没有引用的情况下将它用作对象定义中的键,并且看起来在更现代的浏览器中的普通JS中,他们可以使用它(不引用它)(尽管通常建议这样做)。

在IE8中,你可能不会像obj = {continue:“foo”}那样设置它,你可能不会像obj.continue那样,它必须是obj [“continue”]。

用{{messages [“continue”]}}替换{{messages.continue}}或重命名该属性修复了问题。

希望能帮助某人:)

罗布