0

我试图在我的 haml 模板中输出一个下划线模板变量,但我没有任何运气。

HTML 没有被转义,所以我似乎无法弄清楚为什么下划线变量没有呈现。

HAML - 完整模板

%script{:type => "text/template", :id => "user_list_template"}
  %h4 Users
  #test
  %table.table.table-bordered
    %thead
      %tr
        %th #
        %th Name
        %th Nickname
        %th
          %tbody
          {{ _.each( users, function(user) { }}
            %tr
              %td {{= user.get('id') }}
              %td {{= user.get('name') }}
              %td {{= user.get('nickname') }}
              %td 
                %a.btn{:href => "{{= user.get('nickname') }}"}
                  View User
          {{ }); }}

来源

<tr>
  <td>9</td>
  <td>TacoHell</td>
  <td>TacoHelll</td>
  <td>
    <a class="btn" href="<%= user.get('nickname') %>">
      View User
    </a>
  </td>
</tr>

模板的 Console.log

<h4>Users</h4>
<div id='test'></div>
<table class='table table-bordered'>
  <thead>
    <tr>
      <th>#</th>
      <th>Name</th>
      <th>Nickname</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
  {{ _.each( users, function(user) { }}
    <tr>
      <td>{{= user.get('id') }}</td>
      <td>{{= user.get('name') }}</td>
      <td>{{= user.get('nickname') }}</td>
      <td>
        <a class='btn' href="{{= user.get('nickname') }}">
          View User
        </a>
      </td>
    </tr>
  {{ }); }}
  </tbody>
</table>

我已通读先前提出的问题,但无法使其正常工作。有任何想法吗?

编辑 1 添加了完整模板

编辑 模板的 2 console.log

4

1 回答 1

0

这与其说是一种解决方案,不如说是一种解决方法,但一种替代方法是为您的下划线模板使用不同的语法(不涉及<and的语法>)。如果你看:

http://documentcloud.github.com/underscore/#template

您会发现它们提供了替代 Django/Mustache 样式模板语法的示例:

如果 ERB 样式的分隔符不是您喜欢的,您可以更改 Underscore 的模板设置以使用不同的符号来衬托内插代码。定义一个插值正则表达式以匹配应逐字插入的表达式,一个转义正则表达式以匹配应在 HTML 转义后插入的表达式,以及一个评估正则表达式以匹配应在不插入结果字符串的情况下计算的表达式。您可以定义或省略这三者的任意组合。例如,要执行 Mustache.js 样式模板:

_.templateSettings = {
  interpolate : /\{\{(.+?)\}\}/g
};

var template = _.template("Hello {{ name }}!");
template({name : "Mustache"});
=> "Hello Mustache!"

当然,如果你正在考虑寻找更强大的模板系统,那么放弃_.template并使用 Mustache、Handlebars 或类似的模板系统肯定不会有什么坏处。但是,如果您对 Underscore 感到满意,_.templateSettings.interpolate将允许您在没有<or的情况下使用它>

于 2013-01-17T21:35:52.537 回答