作為一名前端開發工程師,你必須掌握的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.pswp.cn/news/390284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390284.shtml
英文地址,請注明出處:http://en.pswp.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"}…