防止下划线模板使用全局变量

时间:2014-02-04 17:21:45

标签: javascript underscore.js

我的下划线模板包含以下内容:

<% if (typeof title !== "undefined") { %>
    <p class="title"><%= title %></p>
<% } %> 

在渲染(data.title)之前没有名称间隔我的模板数据,有没有办法防止下划线使用全局范围?我必须依赖undefined并且不能安全地从全局范围(不是我的代码)中删除title

2 个答案:

答案 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 %>,但最后还是必须这样做。