Web 應(yīng)用通常採用 MVC 架構(gòu),將業(yè)務(wù)邏輯與展現(xiàn)視圖分離。複雜的項目涉及大量客戶端 HTML 使用 JavaScript 操作,維護(hù)起來可能很困難。在這種情況下,我們可以使用模板系統(tǒng)來提高可重用性,並簡化視圖管理任務(wù)。 Mustache.js 提供了一個文檔完善的模板系統(tǒng),可用於管理模板。而且,由於 Mustache 支持多種語言,我們無需在服務(wù)器端使用單獨的模板系統(tǒng)。本文介紹了使用 Mustache 的基礎(chǔ)知識。
關(guān)鍵要點
- Mustache.js 是一個文檔完善的模板系統(tǒng),可用於管理複雜 Web 應(yīng)用中的 HTML 模板,提高可重用性並簡化視圖管理任務(wù)。
- Mustache.js 是無邏輯的,這意味著其模板不包含任何 if-else 條件或 for 循環(huán)。它使用雙大括號表示的標(biāo)籤將數(shù)據(jù)添加到模板中。
- Mustache 模板可以通過多種方式定義,包括內(nèi)聯(lián)方法、內(nèi)聯(lián)腳本和外部 HTML 片段。選擇哪種方法取決於項目的具體需求。
- Mustache.js 是一款多功能工具,可在客戶端和服務(wù)器端使用,並支持多種語言。它還帶有用於管理複雜模板的標(biāo)籤,例如變量、節(jié)、函數(shù)和部分模板。
為什麼我們需要模板系統(tǒng)?
大多數(shù)不了解模板系統(tǒng)的開發(fā)者會創(chuàng)建新的 HTML 代碼塊,並使用 JavaScript 動態(tài)地將它們插入 DOM。一種常見的方法是將 HTML 元素指定為字符串,然後設(shè)置 innerHTML 屬性或調(diào)用 jQuery html() 方法。下面是一個示例:
var dynamic_html = "<div>HighlightedAuthor</div>"; document.getElementById("container").innerHTML = dynamic_html;</pre>另一種構(gòu)建 DOM 的方法是創(chuàng)建元素並分別追加它們,如下所示:
var title = document.createElement('div'); var highlight = document.createElement('span'); var highlight_text = document.createTextNode("Highlight"); var author = document.createElement('span'); var author_text = document.createTextNode("Author"); var container = document.getElementById('container'); highlight.appendChild(highlight_text); title.appendChild(highlight); author.appendChild(author_text); title.appendChild(author); container.appendChild(title);</pre>以上兩種方法都可以有效地將元素動態(tài)添加到文檔中??紤]這樣一種情況:我們有一個設(shè)計精良的項目符號列表,需要在網(wǎng)站的三個不同類型的頁面中使用。使用這些技術(shù),我們將不得不在三個不同的位置重複列表的 HTML 代碼。這通常被認(rèn)為是不好的編碼習(xí)慣。在這種情況下,我們可以在不同位置使用預(yù)定義的模板,而無需重複代碼。 Mustache.js 是一個非常流行的 JavaScript 模板引擎。由於 Mustache 提供了多種語言的服務(wù)器端和客戶端模板,因此我們不必?fù)?dān)心選擇單獨的模板引擎。
Mustache.js 入門
Mustache 是一個開源的無邏輯模板系統(tǒng),適用於 JavaScript、Ruby、Python、PHP 和 Java 等語言。您可以訪問 GitHub 上的官方頁面獲取庫的副本。 Mustache 將模板和視圖作為創(chuàng)建動態(tài)模板的基礎(chǔ)。視圖包含要包含在模板中的 JSON 數(shù)據(jù)。模板包含帶有模板標(biāo)籤的展現(xiàn) HTML 或數(shù)據(jù),用於包含視圖數(shù)據(jù)。前面我們提到 Mustache 是無邏輯的。這意味著模板不包含任何 if-else 條件或 for 循環(huán)?,F(xiàn)在,讓我們通過一個簡單的示例開始使用 Mustache 模板。
var dynamic_html = "<div>HighlightedAuthor</div>"; document.getElementById("container").innerHTML = dynamic_html;</pre>首先,我們需要在文檔中包含 mustache.js 文件。然後,我們可以開始創(chuàng)建 Mustache 模板。在上面的示例中,我們有一個視圖,其中包含一個人的姓名和職業(yè)。然後,我們在 render() 函數(shù)內(nèi)使用展現(xiàn)代碼和姓名和職業(yè)數(shù)據(jù)的標(biāo)籤。標(biāo)籤由圍繞它們的雙大括號或鬍鬚表示?,F(xiàn)在,讓我們看看 render() 方法是如何工作的。
渲染 Mustache 模板
以下代碼顯示了 mustache.js 文件中 render() 函數(shù)的實現(xiàn)??梢韵?render() 傳遞三個參數(shù)。前兩個參數(shù) template 和 view 是必需的。 partials 可以被認(rèn)為是動態(tài)模板,您可以將其註入到主模板中。在我們之前的示例中,我們將模板作為內(nèi)聯(lián)參數(shù)傳遞,將視圖作為第二個參數(shù)傳遞,並將結(jié)果賦值給輸出變量。
var title = document.createElement('div'); var highlight = document.createElement('span'); var highlight_text = document.createTextNode("Highlight"); var author = document.createElement('span'); var author_text = document.createTextNode("Author"); var container = document.getElementById('container'); highlight.appendChild(highlight_text); title.appendChild(highlight); author.appendChild(author_text); title.appendChild(author); container.appendChild(title);</pre>這是使用 Mustache 進(jìn)行模板化的最基本形式。讓我們看看其他可用於創(chuàng)建更規(guī)范代碼的方法。
定義 Mustache 模板
在您的應(yīng)用程序中定義 Mustache 模板有多種方法。這些方法類似於使用內(nèi)聯(lián)樣式、內(nèi)聯(lián)樣式表和外部樣式表包含 CSS。我們前面討論的示例可以被認(rèn)為是一種內(nèi)聯(lián)方法,因為我們直接將模板傳遞給函數(shù)。此方法阻止了可重用模板的可能性。讓我們看看如何將模板定義為內(nèi)聯(lián)腳本模板,而不是直接傳遞給函數(shù)。
模板作為內(nèi)聯(lián)腳本
我們可以在
</pre>
您可以根據(jù)需要在文檔中包含任意數(shù)量的具有不同 ID 的模板。當(dāng)您要使用模板時,使用 innerHTML 獲取腳本標(biāo)籤內(nèi)的 HTML,並將其作為模板傳遞。我們的第一個示例將更改為以下代碼:
<!DOCTYPE html> <html lang="en"> <head> <title>Mustache.js Inline Method</title> <??> </head> <body> <??> <p id="person"></p> </body> <??> </html></pre>如您所見,模板是單獨存儲的,並在需要時動態(tài)使用。此方法增加了重用模板的可能性。但是,使用內(nèi)聯(lián)腳本會將模板的作用域限制在一個頁面上。如果您有多個頁面,則必須再次定義模板。因此,包含外部文件中的模板將是理想的解決方案——就像 CSS 一樣。
模板作為外部 HTML 片段
在此技術(shù)中,我們將使用 jQuery 來實現(xiàn)模板化。 jQuery 提供了一個名為 load() 的函數(shù),可用於獲取外部文檔的一部分。我們將使用此方法從外部模板文件動態(tài)加載模板。 load() 函數(shù)執(zhí)行腳本而不是返回它們,因此我們不能像在前面方法中那樣在腳本標(biāo)籤內(nèi)創(chuàng)建模板。以下示例顯示了我們將要使用的外部模板文件。
var dynamic_html = "<div>HighlightedAuthor</div>"; document.getElementById("container").innerHTML = dynamic_html;</pre>我們已對模板使用
<div>
元素而不是腳本,以使其與 jQuery 的 load() 函數(shù)兼容。這裡,我們有三個具有三個不同 ID 的不同模板?,F(xiàn)在,讓我們繼續(xù)在您的頁面中使用這些模板。var title = document.createElement('div'); var highlight = document.createElement('span'); var highlight_text = document.createTextNode("Highlight"); var author = document.createElement('span'); var author_text = document.createTextNode("Author"); var container = document.getElementById('container'); highlight.appendChild(highlight_text); title.appendChild(highlight); author.appendChild(author_text); title.appendChild(author); container.appendChild(title);</pre>jQuery 將返回的文檔插入 HTML 元素中,而不是將其賦值給變量。因此,我們需要一個虛擬容器來保存模板。我已經(jīng)使用了默認(rèn)情況下隱藏的模板容器。上面的示例檢索 template1 並加載它。然後,我們可以從虛擬容器中獲取模板並將其傳遞給 Mustache 進(jìn)行渲染。這就是外部方法的工作方式。我們還可以使用 AJAX 請求從服務(wù)器獲取數(shù)據(jù)。
結(jié)論
模板引擎和框架對於管理具有動態(tài)變化的展現(xiàn)視圖的複雜系統(tǒng)非常重要。 Mustache.js 是在客戶端管理模板的最佳選擇之一。我們在本教程的開頭解釋了為什麼模板很重要。然後,我們繼續(xù)介紹使用 Mustache 模板的各種技術(shù)?,F(xiàn)在,您將能夠選擇在項目中實現(xiàn) Mustache 模板的方法。我們已經(jīng)完成了探索使用 Mustache 模板的各種技術(shù),但是 Mustache 還帶有變量、節(jié)、函數(shù)和部分模板等標(biāo)籤,這些標(biāo)籤用於管理複雜的模板。討論每個標(biāo)籤的語法超出了本教程的範(fàn)圍。您可以在 Mustache GitHub 頁面上找到 Mustache 標(biāo)籤的綜合指南。隨意分享您以前使用 Mustache.js 的經(jīng)驗!
Mustache.js 常見問題解答 (FAQ)
- Mustache.js 與其他 JavaScript 模板庫的主要區(qū)別是什麼?
Mustache.js 是一種無邏輯模板語法。這意味著它可以用於 HTML、配置文件、源代碼——任何內(nèi)容。它的工作原理是使用哈?;?qū)ο裰刑峁┑闹禂U展模板中的標(biāo)籤。與其他 JavaScript 模板庫不同,Mustache.js 不包含任何 if 語句、else 子句或 for 循環(huán)。相反,它只有標(biāo)籤。一些標(biāo)籤被替換為一個值,一些什麼也沒有,另一些則是一系列值。
- 如何將 Mustache.js 用於 HTML 模板化?
要將 Mustache.js 用於 HTML 模板化,您首先需要在 HTML 文件中包含 Mustache.js 腳本。然後,您在 <script></script>
標(biāo)籤內(nèi)定義一個模板。此模板可以包含要插入數(shù)據(jù)的佔位符。這些佔位符由雙大括號表示,例如 {{name}}。然後,您使用 Mustache.render() 函數(shù)使用您提供的數(shù)據(jù)呈現(xiàn)模板。
- 我可以將 Mustache.js 與 Node.js 一起使用嗎?
是的,您可以將 Mustache.js 與 Node.js 一起使用。為此,您需要使用 npm 安裝 mustache 包。安裝完成後,您可以在 Node.js 文件中需要它並使用它來呈現(xiàn)模板。
- 如何使用 Mustache.js 遍歷數(shù)組?
在 Mustache.js 中,您可以使用 {{#array}}…{{/array}} 語法遍歷數(shù)組。在此塊內(nèi),您可以使用 {{.}} 來引用數(shù)組中的當(dāng)前項。這允許您在模板中顯示數(shù)組中的每一項。
- 如何在 Mustache.js 中使用條件語句?
雖然 Mustache.js 是一個無邏輯模板庫,不支持傳統(tǒng)的 if 語句,但您仍然可以使用節(jié)來獲得類似的結(jié)果。節(jié)根據(jù)數(shù)據(jù)對像中鍵的值呈現(xiàn)文本塊一次或多次。
- 如何在 Mustache.js 中包含部分模板?
Mustache.js 中的部分模板允許您在一個較大的模板中包含較小的模板。這對於重用公共元素(如頁眉和頁腳)非常有用。要包含部分模板,您可以使用 {{>partial}} 語法。
- 如何在 Mustache.js 中轉(zhuǎn)義 HTML?
默認(rèn)情況下,Mustache.js 會轉(zhuǎn)義數(shù)據(jù)中的 HTML,以防止 XSS 攻擊。如果您想從數(shù)據(jù)中呈現(xiàn) HTML,可以使用三重大括號語法,例如 {{{html}}}。
- 我可以將 Mustache.js 用於服務(wù)器端嗎?
是的,您可以將 Mustache.js 用於服務(wù)器端。這對於在將模板發(fā)送到客戶端之前呈現(xiàn)它們非常有用,從而減少了需要在客戶端執(zhí)行的 JavaScript 量。
- 如何在 Mustache.js 中預(yù)編譯模板?
在 Mustache.js 中預(yù)編譯模板可以通過減少運行時需要完成的工作來提高性能。要預(yù)編譯模板,您可以使用 Mustache.parse() 函數(shù)。
- 如何調(diào)試 Mustache.js 模板?
調(diào)試 Mustache.js 模板可能很棘手,因為該庫沒有提供很多錯誤消息。但是,您可以使用 Mustache.parse() 函數(shù)檢查您的模板是否有效。此函數(shù)返回一個標(biāo)記數(shù)組,您可以檢查它以查看您的模板結(jié)構(gòu)是否正確。
以上是用Mustache.js創(chuàng)建HTML模板的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

javascriptisidealforwebdevelogment,whilejavasuitslarge-scaleapplicationsandandandroiddevelopment.1)javascriptexceleatingingingingingingingbeatingwebexperienceswebexperienceswebexperiencesandfull-stackdeevermentwithnode.js.2)

在JavaScript中,選擇單行註釋(//)還是多行註釋(//)取決於註釋的目的和項目需求:1.使用單行註釋進(jìn)行快速、內(nèi)聯(lián)的解釋;2.使用多行註釋進(jìn)行詳細(xì)的文檔說明;3.保持註釋風(fēng)格的一致性;4.避免過度註釋;5.確保註釋與代碼同步更新。選擇合適的註釋風(fēng)格有助於提高代碼的可讀性和可維護(hù)性。

是的,javascriptcommentsarenectary和shouldshouldshouldseffectional.1)他們通過codeLogicAndIntentsgudedepleders,2)asevitalincomplexprojects,和3)handhanceClaritywithOutClutteringClutteringThecode。

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

評論arecrucialinjavascriptformaintainingclarityclarityandfosteringCollaboration.1)heelpindebugging,登機,andOnderStandingCodeeVolution.2)使用林格forquickexexplanations andmentmentsmmentsmmentsmments andmmentsfordeffordEffordEffordEffordEffordEffordEffordEffordEddeScriptions.3)bestcractices.3)bestcracticesincracticesinclud

JavaScripthasseveralprimitivedatatypes:Number,String,Boolean,Undefined,Null,Symbol,andBigInt,andnon-primitivetypeslikeObjectandArray.Understandingtheseiscrucialforwritingefficient,bug-freecode:1)Numberusesa64-bitformat,leadingtofloating-pointissuesli

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)
