我们有一个Backbone / Marionette Web应用程序。该应用程序在现代浏览器中运行良好,但在IE8中随
而死SCRIPT1010: Expected identifier
调试器指向Underscore.js库中的一行而不是我的代码。显然库中没有问题 - 我们的代码触发了这个问题。这条线就是这个
var render = new Function(settings.variable || 'obj', '_', source);
问题是什么?
答案 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}}或重命名该属性修复了问题。
希望能帮助某人:)
罗布