Handlebars学习之——表达式

来源:互联网 发布:php字符串加密解密 编辑:程序博客网 时间:2024/06/04 17:54

Handlebars表达式是Handlebars模板的基本单元,可以单独在{{mustache}}中使用它,将它们传入Handlebars helper,或将它们作为hash arguments的值使用

基本使用

<h1>{{title}}</h1>

这个表达式的意思是:在当前上下文中查找title属性

Handlebars也可以使用.来分隔标识符,这类表达式被称为path

<h1>{{article.title}}</h1>

这个表达式的意思是:在当前上下文中查找article属性,并在查找结果中查找title属性

也支持用/来分隔,但不推荐使用

标识符可以是任何Unicode编码的字符,除了:

空格 ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~

要引用一个不是合法标识符的属性,可以用方括号[,如:

{{#each articles.[10].[#comments]}}  <h1>{{subject}}</h1>  <div>    {{body}}  </div>{{/each}}

上述articles.[10].[#comments]相当于JavaScript中的articles[10]['#comments']

当使用{{expression}}时,handlebars会转义其中的html内容,而使用{{{expression}}}时不会转义

Handlebars.registerHelper('link', function(str){    return '<span>'+ str +'</span>';});{{link 'hello'}}  //<span>hello</span>{{{link 'hello'}}}  //hello

Helpers

handlebars helper相当于一个函数,先在js代码中注册一个helper:

Handlebars.registerHelper('link', function(str){  return '<span>'+ str +'</span>';});

然后在模板文件中调用helper,第一个标识符为注册的helper的名称,在本例中为”link”,后面跟着helper回调函数的参数,可以是0个或多个,用空格隔开

{{{link 'hello'}}}

此外,handlebars还可以接收一些可选的键值对序列作为helper回调函数最后一个参数的值(这在Handlebars中被称为hash arguments)。
hash arguments的key是一个普通的标识符,value则是一个Handlebars表达式,因此可以是标识符、path或字符串

模板文件中:

{{{hash 'hello' href='world'}}}
handlebars.registerHelper('hash', function(str, options){  console.log(options.hash);});

输出

{ href: 'world' }

子表达式

Handlebars支持子表达式,可以在一个mustache中调用多个helper,内层helper的返回结果将作为外层helper的参数传递

{{outer-helper (inner-helper 'abc') 'def'}}

控制空白

当在mustache语句的两侧使用~符号,可以去除那一侧的所有空白,直到遇到非空白字符或第一个handlebars表达式

示例:

上下文:

{  nav: [    {url: 'foo', test: true, title: 'bar'},    {url: 'bar'}  ]}

下列模板代码:

{{#each nav}}  <a href="{{url}}">    {{#if test}}      {{title}}    {{^}}      Empty    {{/if}}  </a>{{~/each}}

会输出:

<a href="foo">    bar</a><a href="bar">    Empty</a>

使用~去除空白:

{{#each nav ~}}  <a href="{{url}}">    {{~#if test}}      {{~title}}    {{~^~}}      Empty    {{~/if~}}  </a>{{~/each}}

输出:

<a href="foo">bar</a><a href="bar">Empty</a>

转义

这边说的转义并不是指html转义,而是输出模板语句,如直接输出{{title}}而不是输出title

Handlebars有两种转义方式:

  • inline escapes
  • raw blocks

inline escapes就是在mustache区块之前加一个反斜杠\

\{{escaped}}

raw blocks是用四个大括号{{{{将要转义的区块围住来进行转义

{{{{raw}}}}  {{escaped}}{{{{/raw}}}}

然后还要写一个helper:

handlebars.registerHelper('raw', function(options) {  return options.fn();});

(这么多花括号看得眼睛都花了…)

参考

  • Handlebars.js: Minimal Templating on Steroids
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不用心学习怎么办? 恋爱中不够细心怎么办 孩子不愿学英语怎么办 孩子不愿学数学怎么办 孩子不愿学钢琴怎么办 小孩子学习不开窍怎么办 一年级没有读好怎么办 小孩眉毛很杂乱怎么办 孩子不好好听课怎么办 成绩差的孩子怎么办 三年级语文太差怎么办? 孩子叛逆不学习怎么办 三年级阅读理解能力差怎么办 孩子静不下心怎么办 孩子体温低于35怎么办 小孩体温突然低怎么办 宝宝35.5度体温怎么办 宝宝出汗体温低怎么办 小孩体温35.2度怎么办 孩子睡觉出冷汗怎么办 小孩感冒发烧咳嗽怎么办 小孩咳嗽出汗多怎么办 小孩手脚出汗多怎么办 小孩感冒出虚汗怎么办 宝宝感冒出冷汗怎么办 宝宝感冒睡觉出汗怎么办 宝宝感冒冒冷汗怎么办 宝宝感冒爱出汗怎么办 宝宝感冒老出汗怎么办 两只小鸡打架怎么办 老年人老是换保姆怎么办 孩子9不吃饭怎么办 两岁半宝宝不爱喝水怎么办 宝宝老是不吃饭怎么办 宝宝不爱吃饭喝水怎么办 小宝宝突然不爱吃饭怎么办 一岁多小宝宝不爱吃饭怎么办 宝宝肚子发撑怎么办 小宝宝咳嗽有痰怎么办 一岁小宝宝咳嗽怎么办 oppo连wifi超时怎么办