使用下划线模板变量进行Haml插值

时间:2013-01-17 20:27:42

标签: backbone.js haml underscore.js

我想在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模板

1 个答案:

答案 0 :(得分:0)

这不是一个解决方案,因为它是一种解决方法,但一种替代方法是为Underscore模板使用不同的语法(一种不涉及<>) 。如果你看看:

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

你会发现它们提供了备用Django / Moustache样式模板语法的示例:

  

如果ERB风格的分隔符不是你的一杯茶,你可以改变   下划线的模板设置使用不同的符号来设置   内插代码。定义插值正则表达式以匹配表达式   应该逐字插入,匹配的逃避正则表达式   在HTML转义后应该插入的表达式,以及   评估正则表达式以匹配应该在没有评估的表达式   插入到结果字符串中。您可以定义或省略任何   三者的结合。例如,执行Mustache.js样式   模板:

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

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

当然,如果您正在考虑寻找更强大的模板系统,那么放弃_.template并使用Mustache,Handlebars或类似的模板系统肯定不会受到伤害。但如果您对Underscore感到满意,_.templateSettings.interpolate将允许您在<>之前使用它。