将对象传递给 underscore.js 模板
Pass object to underscore.js template
我正在尝试将对象传递给 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 版本)中的做法?
underscore templates 使用 Mustache.js 渲染,所以你应该使用它的 "Logic-less" 语法而不是执行 JS 代码。
根据他们的 docs example,您应该能够在不使用您在评论部分提供的代码的情况下进行迭代:<% _.each(data, function(datum) { %>
,而是使用模板
<%
{{#datum}}
<b>{{datumvalue}}</b>
{{/datum}}
%>
编辑:那不是真的(感谢您指出 Uzi Kilon),下划线不使用小胡子,在再次查看文档后,它说您可以通过添加来使用 "Mustache.js-style"编译前的以下设置:
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
仍应考虑避免模板中出现大量 JS 并保持项目完整性
自版本 1.7.0 起,Underscore 模板不再接受初始数据对象。 _.template
现在总是 returns 函数。
我正在尝试将对象传递给 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 版本)中的做法?
underscore templates 使用 Mustache.js 渲染,所以你应该使用它的 "Logic-less" 语法而不是执行 JS 代码。
根据他们的 docs example,您应该能够在不使用您在评论部分提供的代码的情况下进行迭代:<% _.each(data, function(datum) { %>
,而是使用模板
<%
{{#datum}}
<b>{{datumvalue}}</b>
{{/datum}}
%>
编辑:那不是真的(感谢您指出 Uzi Kilon),下划线不使用小胡子,在再次查看文档后,它说您可以通过添加来使用 "Mustache.js-style"编译前的以下设置:
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
仍应考虑避免模板中出现大量 JS 并保持项目完整性
自版本 1.7.0 起,Underscore 模板不再接受初始数据对象。 _.template
现在总是 returns 函数。