Handlebars学习(3)- Block Expressions

块表达式允许你定义helpers,该helpers调用一个有着与当前不同上下文的模板块。让我们看一下下面的helpers,它将会获得一个HTML列表:

  {{#list people}}
{{firstName}}
{{lastName}}
{{/list}}

如果有上下文:

  {
    people: [
      {firstName: "Yehuda", lastName: "Katz"},
      {firstName: "Carl", lastName: "Lerche"},
      {firstName: "Alan", lastName: "Johnson"}
    ]
  }

我们将创建一个能够获得HTML列表的名称为list的helper。Helper接收people作为它的第一个参数,一个可选的hash作为第二个参数。可选hash包含一个名称为fn的属性,你可以在一个上下文中调用就像你调用一个正常的Handlebars模板。

  Handlebars.registerHelper('list', function(items, options) {
    var out = "<ul>";

    for(var i=0, l=items.length; i<l; i++) {
      out = out + "<li>" + options.fn(items[i]) + "</li>";
    }

    return out + "</ul>";
  });

执行后,模板将会输出:

  <ul>
    <li>Yehuda Katz</li>
    <li>Carl Lerche</li>
    <li>Alan Johnson</li>
  </ul>

块helpers有很多特性,像可以创建else代码片段(例如,在嵌入if helper中使用)的能力。 因为当你调用options.fn(context)时,一个块helper的上下文被转义,Handlebars不会转义一个块helper的结果。如果它转义了,内部的上下文需要被双重转义。

posted @ 2014-12-18 17:15  South Wind  Views(111)  Comments(0)    收藏  举报