在 Underscore 模板三元中打印变量

Printing variables within Underscore template ternary

是否可以在像这样的评估期间在下划线模板中打印变量。

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

这给了我一个意外的标识符错误。我在第二个 %> 周围尝试了各种 excapings,但它只是按字面打印。我也尝试过使用 print() 别名,这样编译器就不会被重复的 %> 搞糊涂了,但是没有成功。有没有办法在三元中做到这一点?

当您不尝试使用嵌套模板时,工作没有问题。

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 通常是严格的数字,在构建 URL 时最好只使用 encodeURIComponent。干净地转义数据是养成的好习惯。