我试图将对象传递给underscore.js(1.8.3)模板并在模板脚本中使用它。控制台的简单示例:
> t = _.template("<% console.log(data) %>", {data: 42})
> t()
Uncaught ReferenceError: data is not defined
将对象传递给模板脚本以在内部使用的正确方法是什么?
注意:我知道要替换简单值,只需执行以下操作:
t = _.template("<%= data %>")
t({data:42})
<- "42"
但我真的需要在更复杂的脚本中传递和使用对象。
更新
这有效:
> t = _.template("<% console.log(data) %>")
> t({data: [1,2,3,4,5]})
我发誓我并不疯狂(唔不多)......我正在查看backbone.js上的this really good tutorial,在那里他传递像template("...", object)
这样的对象。也许这是他们在旧版本的underscore.js(视频中的版本1.4.2)中做到这一点的方式?
答案 0 :(得分:4)
由于版本1.7.0 Underscore模板不再接受初始数据对象。 _.template
现在总是返回一个函数。
答案 1 :(得分:0)
underscore templates使用Mustache.js进行渲染,因此您应该使用它的“无逻辑”语法而不是执行JS代码。
根据他们的docs example,您应该能够在不使用评论部分提供的代码的情况下进行迭代:<% _.each(data, function(datum) { %>
,但请改用模板
<%
{{#datum}}
<b>{{datumvalue}}</b>
{{/datum}}
%>
编辑:那不是真的(感谢你指出它Uzi Kilon),下划线不使用胡子,经过第二次查看文档,它说你可以通过添加“Mustache.js-style”来添加编译前的以下设置:
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
仍应考虑避免模板中的大量JS并保持项目健全性