我的下划线模板包含以下内容:
<% if (typeof title !== "undefined") { %>
<p class="title"><%= title %></p>
<% } %>
在渲染(data.title
)之前没有名称间隔我的模板数据,有没有办法防止下划线使用全局范围?我必须依赖undefined
并且不能安全地从全局范围(不是我的代码)中删除title
。
答案 0 :(得分:0)
咳嗽咳嗽我的补丁,解析密钥的模板并创建占位符
https://github.com/jashkenas/underscore/issues/237
或者如果您对使用来自互联网的随机代码修补核心库感到不舒服:)
您可以将模板包装在try catch中并显示错误消息
<% try { %>
TEMPLATE OF DOOM FULL OF FAIL
<% } catch (error instanceof ReferenceError){ %>
GENERIC REFERENCE ERROR MESSAGE
<% } %>
或更好地传递包装对象,并引用包装的密钥
例如,看看裸体“dataIWasGoingToPutIntoTemplateUnwrapped”是如何包装在关键的“数据”中的
var dataIWasGoingToPutIntoTemplateUnwrapped = {
iAmVar:"hello",
iHasVarKThxBye:"world"
};
var underscoreTemplate = _.("<%= data.iAmVar %> and <%=data.iHasVarKThxBye%>");
console.log(underscoreTemplate({data:dataIWasGoingToPutIntoTemplateUnwrapped }));
答案 1 :(得分:0)
答案是否定的(感谢Bergi的评论)。我一直希望避免将几十个复杂的下划线模板从<%= foo %>
更新到<%= data.foo %>
,但最后还是必须这样做。