作为一名前端开发工程师,你必须掌握的WEB模板引擎:Handlebars

5649

为什么需要使用模板引擎?

关于为什么要使用模板引擎,按照我常说的一句话就是:不用重复造轮子了。

简单来说,模板最本质的作用是“变静为动”,一切利于这方面的都是优势,不利于的都是劣势。
要想很好地实现“变静为动”的目的,有这么几点:
1. 可维护性(后期改起来方便);
2. 可扩展性(想要增加功能,增加需求方便);
3.开发效率提高(程序逻辑组织更好,调试方便);
4.看起来舒服(不容易写错);
从以上四点来看,前端模板引擎体现的优势都不是一点两点的。
其实最重要的一点就是:视图(包括展示渲染逻辑)与程序逻辑的分离,分离的好处太多了,比如说后期的维护修改代码,增加代码,调试代码,和应用开发模式(MVC、MVVM)都方便很多。

二. 选择Handlebars的原因

1. 全球最受欢迎的模板引擎
Handlebars是全球使用率最高的模板引擎,所以当之无愧是全球最受欢迎的模板引擎。
Handlebars在许多前端框架中都被引入,比如在MUI和AmazeUI等框架,都推荐使用Handlebars。
以AmazeUI为例,AmazeUI的文档中专门为Web组件提供了其Handlebars的编译模板
5688
2. 语法简单
Handlebars的基本语法极其简单,使用{{value}}将数据包装起来即可,Handlebars会自动匹配响应的数值和对象.以下是一个最简单的模板:
5680

三.使用Handlebars介绍

1. 下载Handlebars
通过Handlebars官网下载: http://handlebarsjs.com./inst...
通过npm下载: npm install --save handlebars
通过bower下载: bower install --save handlebars
通过Github下载: https://github.com/daaain/Han...
通过CDN引入:https://cdnjs.com/libraries/h...
2. 引入Handlebars
通过<script>标签引入即可,和引入jQuery库类似:
5693
3. 创建模板
步骤一: 通过一个<script>将需要的模板包裹起来
步骤二: 在<script>标签中填入type和id
type类型可以是除text/javascript以外的任何MIME类型,但推荐使用type="text/template",更加语义化
id是在后面进行编译的时候所使用,让其编译的代码找到该模板.
步骤三: 在<script>标签中插入我们需要的html代码,根据后台给我们的接口文档,修改其需要动态获取的内
5699

4. 在JS代码中编译模板
5707
以上述代码为例进行解释:
步骤一: 获取模板的内容放入到tpl中,这里$("#myTemplate")中填入的内容为你在上一步创建模板中所用的id.
提醒: 这里我使用的jQuery的选择器获取,当然,你可以使用原生javascript的DOM选择器获取,例如:docuemnt.getElementById('myTemplate')和document.querySelector('#myTemplate')
步骤二: 使用Handlebars.compile()方法进行预编译,该方法传入的参数即为获取到的模板
步骤三: 使用template()方法进行编译后得到拼接好的字符串,该方法传入的参数即为上一步预编译的模板
步骤四: 将编译好的字符串插入到你所希望插入到的html文档中的位置,这里使用的是jQuery给我们提供的html()方法.同样,你也可以使用原生的innerHTML

四.实际运用中5个常用功能

1.Templates
当您引入库之后,我们可以愉快的书写模板了,推荐的方式是通过特殊type的script标签来添加模板,type属性是非常重要的,否则浏览器会将它们看做javascrip解析。

模板具有一个很容易理解的语法,可以使用html、普通文本和表达式,表达式通常被包含在两对或三对花括号里,可以包含变量或功能函数。模板需要编译之后才能使用,如下面代码所示,注意一点,我们使用了jquery仅仅为了方便dom操作,handlebars可以脱离jquery良好工作。

5717

5719

2. Expressions
上面所示的例子,表达式中的任何html代码将会被自动忽略,这是一个非常实用的性能,但是有的时候我们需要解析html,那么就要用三个花括号{{{ }}},如下面代码所示。
另外,handlebars表达式允许嵌套值,可以方便我们访问javascript对象的任何值。
5725

5727

3. Context
Handlebars利用了Mustache的强大特性,context就是其中之一。我们可以把需要传递的数据放在这个javascript对象中,使用#each、#with等方法可以方便的使用该对象的数据。看了下面这个案例,那就明白了
5730

5732

4. Helpers
Handlebars不允许在模板中使用javascript,而是提供了一些列的功能函数(helpers),可以在模板中调用,方便代码重用和创造复杂模板。使用表达式调用helpers的格式类似如此,{{helpername}},同时也可以传递参数,{{helpname 12345}}。
开发新的helper,使用registerHelper function,下面代码演示了如何创建新的功能函数,如何使用内置的功能函数
5736

5738

5. Block helpers
Block helpers像普通的功能函数一样,但是有开始和结束标签(类似于内置的#if、#each等),可以修改包含的html的内容。创建更为复杂一些,当时功能更加强大。经常使用它们重复使用功能、创建一大段可重用的html等。
同样使用Handlebars.registerHelper()创建block helper,不同的是我们需要使用第二参数,回调函数。看看下面的代码
5742

5744

现在你基本上了解了handlebars的常用功能,同样您可以通过Handlebars.js-官方网站,可以获取更多案例、官方文档
地址:http://handlebarsjs.com/

最后

模板引擎是我们做前端开发必备的一个知识,对于我们快速开发和做出更加健全的优秀代码都是有帮助的。
我在《8个要点教你轻松写出优秀Javascript代码》里面有讲过怎么写好我们的JavaScript代码,大家可以去看一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

extjs 实用开发指南_如何提出有效问题:针对开发人员的实用指南

extjs 实用开发指南Learning is a journey that never ends. At every point in your career, you will keep learning, re-learning, and un-learning. 学习是一个永无止境的旅程。 在职业生涯的每个阶段&#xff0c;您都会不断学习&#xff0c;重新学习和不学习。 The abil…

LOJ 6270

最近&#xff08;一直&#xff09;有点&#xff08;很&#xff09;蠢 按照区间大小排序做区间包含多少区间的话 只用考虑 左端点比当前左端点小的和右端点比当前右端点大的&#xff0c;因为不可能同时满足 关于K&#xff0c;就在做到K的时候减一下就好了&#xff0c;一直傻逼在…

Zabbix3.4安装详细步骤

Zabbix3.4安装的详细步骤一、zabbix介绍现在大多数公司都会用到监控软件&#xff0c;主流的监控软件就是Zabbix了&#xff0c;当然还会有Nagios等其他的软件&#xff1a;zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种…

软件自学成才到公司要学历吗_作为一名自学成才的移动开发人员,我在旅途中学到了什么

软件自学成才到公司要学历吗In this post, Ill share my entire journey about how I became a professional mobile developer.在这篇文章中&#xff0c;我将分享我如何成为一名专业的移动开发人员的整个过程。 I hope that reading about my experience will help you refle…

cs231n---语义分割 物体定位 物体检测 物体分割

1 语义分割 语义分割是对图像中每个像素作分类&#xff0c;不区分物体&#xff0c;只关心像素。如下&#xff1a; &#xff08;1&#xff09;完全的卷积网络架构 处理语义分割问题可以使用下面的模型&#xff1a; 其中我们经过多个卷积层处理&#xff0c;最终输出体的维度是C*H…

http协议内容

前言&#xff1a; http协议&#xff1a; 对浏览器客户端 和 服务器端 之间数据传输的格式规范http1.0&#xff1a;当前浏览器客户端与服务器端建立连接之后&#xff0c; 只能发送一次请求&#xff0c;一次请求之后连接关闭。 http1.1&#xff1a;当前浏览器客户端与服务器端建…

array_combine()

转载于:https://www.cnblogs.com/xiaobiaomei/p/8392728.html

CSS外边距(margin)重叠及防止方法

#css外边距margin重叠及防止方法CSS外边距(margin)重叠及防止方法 #1-什么是外边距margin重叠1. 什么是外边距(margin)重叠 外边距重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容、补白、边框)重合在一起而形成一个单一边界。 #2-相邻marign重叠的…

composer windows安装

一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extensionphp_openssl.dll 3.下载php_ssh2.dll、php_ssh2.pdb,http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 4.把php_ssh2.dll、php_ssh2.pdb文件放php的ext文件夹 5.重启ap…

spring整合mybatis采坑

本来这个错误是整合spring和mybatis遇到的错误&#xff0c;但是一直没有解决&#xff0c;但是在做SpringMVC时也了出现了这样的错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name sqlSessionFactory defined in class path resourc…

处理测试环境硬盘爆满

测试环境经常会收到这类告警 第一步 登陆机器查看硬盘使用 执行df 好吧,使用情况真不妙,根目录占用过大 第二步 确定哪个文件太大或者文件过多 进入爆满的目录,如这里是根目录 cd / 然后找下面哪个文件夹或者文件太大,有几种方式: 1.dusudo du -h --max-depth1 | sort -hr 越前…

LeetCode-46. Permutations

一、问题描述 就是全排列问题。 二、问题解决 应该哪一本数据结构的书上都有讲了。 void get_permute(vector<int>& nums, int pos, vector<vector<int>>& result) {if (nums.size() pos) {result.push_back(nums);return;}for (int i pos; i <…

web操作系统开发的_哪种操作系统更适合Web开发

web操作系统开发的If youre new to web development and are in the market for a new laptop, you might be wondering which operating system is best.如果您是Web开发的新手&#xff0c;并且正在购买新的笔记本电脑&#xff0c;您可能想知道哪种操作系统是最好的。 Spoile…

白鹭引擎 - 显示对象的基准点与横纵坐标 ( 绘制一个来回移动的绿色方块 )

class Main extends egret.DisplayObjectContainer {/** * Main 类构造器, 初始化的时候自动执行, ( 子类的构造函数必须调用父类的构造函数 super )* constructor 是类的构造函数, 类在实例化的时候调用* egret.Event.ADDED_TO_STAGE, 在将显示对象添加到舞台显示列表时调度*/…

SpringBoot项目属性配置

我们知道&#xff0c;在项目中&#xff0c;很多时候需要用到一些配置的东西&#xff0c;这些东西可能在测试环境和生产环境下会有不同的配置&#xff0c;后面也有可能会做修改&#xff0c;所以我们不能在代码中写死&#xff0c;要写到配置中。我们可以把这些内容写到applicatio…

670. 最大交换

670. 最大交换 给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 解题思路 目标就是优先锁定高位&#xff0c;像…

flexbox布局_Flexbox vs Grid-如何构建最常见HTML布局

flexbox布局There are so many great CSS resources all over the internet. But what if you just want a simple layout and you want it NOW? 互联网上有很多很棒CSS资源。 但是&#xff0c;如果您只是想要一个简单的布局而现在就想要呢&#xff1f; In this article, I d…

789. 逃脱阻碍者

789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发&#xff0c;你的目的地是 target [xtarget, ytarget] 。地图上有一些阻碍者&#xff0c;以数组 ghosts 给出&#xff0c;第 i 个阻碍者从 ghosts[i] [xi, yi] 出发。所有输入均为 整数坐标 。 每一…

计算机视觉-自定义对象检测器

1、模板匹配 运行指令&#xff1a;python template_matching.py --source 3.jpg --template 2.jpg import argparse import cv2ap argparse.ArgumentParser() ap.add_argument("-s", "--source", requiredTrue, help"Path to the source image"…

Java 微信公众号导出所有粉丝(openId)

由于公众号换了公司主体&#xff0c;需要做迁移&#xff0c;玩家的openId数据需要做处理。 (我是按我要的json格式&#xff0c;将粉丝导成了1万条数据的一个json文件) 文件格式&#xff1a; {"info":[{"openId":"ogVous494ltuNmO4zHb1seHeGLSk"}…