underscore.js 中 if 语句的字符串连接

String concatenation on if statement in underscore.js

我需要修改正在使用 backbone.js 的其他人的代码。这是代码:

    var titleMovieTmpl = _.template('
        <h4 style="display: inline-block;">
            <%= item.title %> (<%= item.year %>)
        </h4>');

如何向此代码添加 if 语句,例如:

<%= item.title %> if (<%= item.year %>){(<%= item.year %>)} 

到目前为止,我现在有:

var titleMovieTmpl = _.template('<h4 style="display: inline-block;"><%= item.title %>' <% if (item.year) { %> + '(<%= item.year %>)'<% } %> + '</h4><a href="javascript:void(0)" class="view-item">view title</a>');

但这给了我 unexpected token % 上的语法错误。以上是什么问题?

<% if (item.year) { %> 
  (<%= item.year %>) 
<% } %>

在我看来,将模板分开会更具可读性,当然是因为它变得更复杂了。它将解决您的引用/连接问题,并且您的 IDE 或编辑器也应该能够更好地处理它。

<script type='template' id='titleMovieTemplate'>
   <h4 style="display: inline-block;">
      <%= item.title %> 
      <% if (item.year) { %>
        (<%= item.year %>)
      <% } %>
   </h4>
</script>

之后您可以在脚本中执行以下操作:

var titleMovieTmpl = _.template(document.getElementById('titleMovieTemplate').innerHTML);