我有一个包含@id
,@type
等属性名称的模型。
如果我尝试在<%= @id %>
模板中使用Marionette.ItemView
(使用Underscore),我会
未捕获的SyntaxError:意外的标记ILLEGAL
使用语法['@id']
不会产生预期的结果。
我是否必须覆盖serializeData
功能?
由于
答案 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
更为重要。