Underscore.js 模板渲染

发布于 2024-12-16 16:44:50 字数 549 浏览 0 评论 0 原文

我有这个示例代码,可以使用下划线模板呈现简单的 unescapedHTML。

var template = $(this.el).html(_.template(this.template, {'data': '<script>'}));
$(this.parent).append(template);

但是当它尝试渲染它时,它导致了错误:

未捕获类型错误:对象 [object Object] 没有方法“替换”

任何人都可以告诉我原因是什么以及如何解决它吗?由于在下划线文档中:

var template = _.template("<b>&lt;%- value %></b>");
template({value : '&lt;script&gt;'});
=> "<b>&lt;script&gt;</b>"

提前致谢。

I have this sample code to render simple unescapedHTML using underscore templating.

var template = $(this.el).html(_.template(this.template, {'data': '<script>'}));
$(this.parent).append(template);

But when it try to render it, it caused an error:

Uncaught TypeError: Object [object Object] has no method 'replace'

Can anyone please enlighten me what's the cause and how to solve it? Since in underscore documentation:

var template = _.template("<b><%- value %></b>");
template({value : '<script>'});
=> "<b><script></b>"

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慕巷 2024-12-23 16:44:50

来自精细手册

模板 _.template(templateString, [context])

将 JavaScript 模板编译为可评估渲染的函数。

_.template 的第一个参数应该是一个字符串,而不是一个 jQuery 对象。 _.template 的部分内部处理调用 String#replace 函数,这就是您的错误的来源。您可能想改用它:

var template = $(this.el).html(_.template(this.template.html(), {'data': '<script>'}));
$(this.parent).append(template);

演示:http://jsfiddle.net/ambigously/wPu6G/

您给出的示例效果很好:

http://jsfiddle.net/ambigously/w2qWe/

所以我不知道 “值”未定义您在评论中提到的错误可能来自。

From the fine manual:

template _.template(templateString, [context])

Compiles JavaScript templates into functions that can be evaluated for rendering.

The first argument for _.template is supposed to be a string, not a jQuery object. Part of the internal processing for _.template calls the String#replace function and that's where your error comes from. You might want to use this instead:

var template = $(this.el).html(_.template(this.template.html(), {'data': '<script>'}));
$(this.parent).append(template);

Demo: http://jsfiddle.net/ambiguous/wPu6G/

The example you give works just fine:

http://jsfiddle.net/ambiguous/w2qWe/

So I don't know where the 'value' is not defined error you mention in your comment could be coming from.

撑一把青伞 2024-12-23 16:44:50

我在服务器上运行节点时遇到了同样的错误。如果您从磁盘读取模板文件并且未指定编码,则 node.js 将返回一个缓冲区。错误基本上是相同的,因为 Underscore 需要一个字符串。确保指定编码,以便将字符串传递给 Underscore。

这会产生错误。

var template = _.template(fs.readFileSync('mytemplate.tpl'));

这很好。

var template = _.template(fs.readFileSync('mytemplate.tpl', { 'encoding':'utf8'}));

I just hit the same error while running node on the server. If you read the template file from disk and you don't specify the encoding then node.js will return a buffer. The error is basically the same because Underscore expects a string. Make sure that you specify an encoding so that you are passing a string to Underscore.

this will produce the error.

var template = _.template(fs.readFileSync('mytemplate.tpl'));

and this is good.

var template = _.template(fs.readFileSync('mytemplate.tpl', { 'encoding':'utf8'}));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文