在Marionette / underscore模板中使用具有奇怪字符的属性

时间:2012-10-27 00:25:27

标签: javascript json backbone.js underscore.js marionette

我有一个包含@id@type等属性名称的模型。

如果我尝试在<%= @id %>模板中使用Marionette.ItemView(使用Underscore),我会

  

未捕获的SyntaxError:意外的标记ILLEGAL

使用语法['@id']不会产生预期的结果。

我是否必须覆盖serializeData功能?

由于

1 个答案:

答案 0 :(得分:3)

下划线模板需要<%= ... %>内的JavaScript表达式,编译的模板使用with,因此您通常可以引用对象属性,就好像它们是变量一样。您的问题是@id不是有效的JavaScript表达式。

是的,提供您自己的serializeData来移除@可能是您最好的选择。另一种可能性是将variable选项与_.template

一起使用
  

默认情况下,模板会通过with语句将数据中的值放在本地范围内。但是,您可以使用变量设置指定单个变量名称。这可以显着提高模板渲染的速度。

_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'});
=> "Using 'with': no"

然后你可以使用像<%= data['@id'] %>这样的东西;问题是,使用这种方法与Marionette一起工作可能比简单地清理自定义@方法中的serializeData更为重要。