【问题标题】:Prevent underscore templates from using global variables防止下划线模板使用全局变量
【发布时间】:2014-06-26 21:54:59
【问题描述】:

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

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

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

【问题讨论】:

  • 不,没有。为模板命名空间没有任何问题(并使用 variable 选项)
  • 谢谢@Bergi,我意识到它没有任何问题。那很可能是我要走的路。我只有很多现有代码,并且正在寻找可能的下划线设置或解决方法。好像没有。

标签: javascript underscore.js


【解决方案1】:

咳咳我的补丁,解析键模板并创建占位符

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”是如何被包裹在关键“data”中的

var dataIWasGoingToPutIntoTemplateUnwrapped = {
     iAmVar:"hello",
     iHasVarKThxBye:"world"
};

var underscoreTemplate = _.("<%= data.iAmVar %> and <%=data.iHasVarKThxBye%>");
console.log(underscoreTemplate({data:dataIWasGoingToPutIntoTemplateUnwrapped }));

【讨论】:

    【解决方案2】:

    答案是否定的(感谢 Bergi 的评论)。我一直希望避免将几十个复杂的下划线模板从&lt;%= foo %&gt; 更新为&lt;%= data.foo %&gt;,但最终还是不得不这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多