将对象传递给underscore.js模板

时间:2015-06-03 00:00:03

标签: javascript underscore.js-templating

我试图将对象传递给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)中做到这一点的方式?

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并保持项目健全性