在Underscore模板三元中打印变量

时间:2017-02-01 17:41:51

标签: javascript underscore.js lodash template-engine

是否可以在评估期间在下划线模板中打印变量,如。

<a href="<%=data.active ? 'the/url' : 'another/url/<%='data.id'%>'%>">Link with printed parameter</a>

这给了我一个意外的标识符错误。我已尝试围绕第二个%>进行各种切换,但它只是按字面打印。我也尝试使用print()别名,这样编译器就不会因重复%>而感到困惑,但没有运气。有没有办法在三元组内做到这一点?

1 个答案:

答案 0 :(得分:3)

当您不尝试使用嵌套模板时,可以正常工作。

var source = document.getElementById("testTemplate").innerHTML;
var testTemplate = _.template(source);

document.getElementById("target1").innerHTML = testTemplate({
  data: {
    active: false,
    id: 12345
  }
});

document.getElementById("target2").innerHTML = testTemplate({
  data: {
    active: true,
    id: 67890
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

<script type="text/template" id="testTemplate">
  <a href="<%= data.active ? 'the/url' : 'another/url/' + encodeURIComponent(data.id) %>">Link with printed parameter</a>
  <p>The URL is "<%= data.active ? 'the/url' : 'another/url/' + encodeURIComponent(data.id) %>".</p>
  <hr>
</script>

<div id="target1"></div>
<div id="target2"></div>

注意:即使您的data.id通常是严格数字的,但最好在构建网址时使用encodeURIComponent。彻底逃离数据是一个很好的习惯。