下划线模板使用“意外标识符”失败.在ie8中

Underscore templates failing with "unexpected identifier" in IE 8

本文关键字:意外标识符 失败 ie8 标识符 意外 下划线      更新时间:2023-09-26

我们有一个骨干网/木偶网络应用程序。该应用程序在现代浏览器中运行良好,但在IE8中出现

就会死机。
SCRIPT1010: Expected identifier

调试器指向Underscore.js库深处的一行,而不是我的代码。显然库中没有问题——是我们的代码触发了这个问题。行是这样的

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

有什么问题吗?

这是我们的一个模板中的一个特殊情况,这意味着当模板被编译时,代码在现代浏览器中很好,但在IE8中却不稳定。

我们正在使用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>

这个问题来自于"continue"是一个保留词。Coffeescript很好,它允许你在对象定义中使用它作为键而不加引号,而且在更现代的浏览器中,在常规JS中,它们似乎可以使用不加引号的键(尽管通常会建议这样做)。

然而,在IE8中,你可能不会像obj = {continue: "foo"}那样设置它,你可能不会像obj那样得到它。继续,必须是obj[" Continue "]。

替换{{消息。使用{{messages[" Continue "]}}或重命名属性可以解决此问题。

希望能帮到别人:)

Rob