Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板。
安装
- 直接下载 Handlebars.js 和 Handlebar Runtime
- 通过npm下载
1 | # 安装 |
快速入门
Handlebar表达式
Handlebars会从当前上下文中查找title和body属性
1 | <div class="entry"> |
路径查询
Handlebars会从当前上下文中查找article属性,然后在查找结果中找title属性
1 | <h1>{{article.title}}</h1> |
标识符不能包含 Whitespace ! “ # % & ‘ ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~
如果出现不合法的属性,可以使用中括号的方式进行引用
1 | {{#each articles.[10].[#comments]}} |
默认情况下 Handlebars为了安全,会对内容进行转义,如需原样输出可以使用`{{{ html }}}`
Helper模板方法
1 | {{{link story}}} |
Handlebars helper支持接收一个可选的键值对参数作为它的最后一个参数传入(hash)
1 | {{{link "See more..." href=story.url class="story"}}} |
Helper 支持嵌套
1 | {{outer-helper (inner-helper 'abc') 'def'}} |
去掉空格
去掉多余空格(在大括号边添加 ~)
1 | {{#each nav ~}} |
标签转义
使用标签原内容
1 | <!-- 在前边添加 \ --> |
编译模板
模板字符串
1 | <script id="entry-template" type="text/x-handlebars-template"> |
使用 Handlebars.compile
编译模板输出模板函数
1 | var source = $("#entry-template").html(); |
命令行工具
1 | npm install handlebars -g |
高级使用
complile 函数
1 | 模板函数接收第二个可选参数,传以下参数: |
块级表达式
块级表达式可以改变模板局部context,块级helper以#开口,结尾以/开发,如`{{#hi}} {{/hi}}`
1 | <div class="entry"> |
路径查找
可以通过 `../name` 或者`{{./name}} or {{this/name}} or {{this.name}}`
1 | {{permalink}} |
模板注释
使用`{{!-- --}} or {{! }}`注释内容
1 | {{!-- This comment will not be in the output --}} |
Helper
使用 Handlebars.registerHelper
注册模板助手
1 | Handlebars.registerHelper('fullName', function(person) { |
模板片段Partials
使用 Handlebars.registerPartial
注册模板片段
1 | Handlebars.registerPartial('myPartial', '{{name}}') |
使用`{{> myPartial }}`调用
1 | <div class="post"> |
内置Helper
if
如果值为 false, undefined, null, "", 0, or []
就会渲染else部分
1 | <div class="entry"> |
unless
相当于if
的else情况
1 | {{#unless license}} |
each
遍历数组,会改变当前context,执行遍历的元素
1 | <ul class="people_list"> |
遍历对象,相当于变量的key;遍历数组,为array的index
with
会改变当前context
1 |
|
处理helper异常
如果调用一个不存在的helper,就会异常,options.name
会自动注入为helper名称
1 | Handlebars.registerHelper('helperMissing', function(/* [args, ] options */) { |
API
1 | // 注册 partial |