<abbr id="mjuqr"></abbr>
    <dfn id="mjuqr"></dfn>
    1. \n \n

      <\/p>\n<\/body>\n\n<\/html><\/pre>\n

      \n<\/p>如您所見,模板是單獨(dú)存儲(chǔ)的,并在需要時(shí)動(dòng)態(tài)使用。此方法增加了重用模板的可能性。但是,使用內(nèi)聯(lián)腳本會(huì)將模板的作用域限制在一個(gè)頁(yè)面上。如果您有多個(gè)頁(yè)面,則必須再次定義模板。因此,包含外部文件中的模板將是理想的解決方案——就像 CSS 一樣。

      \n<\/strong>模板作為外部 HTML 片段<\/p>

      国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

      首頁(yè) web前端 js教程 用Mustache.js創(chuàng)建HTML模板

      用Mustache.js創(chuàng)建HTML模板

      Feb 24, 2025 am 09:35 AM

      Creating HTML Templates with Mustache.js

      Web 應(yīng)用通常采用 MVC 架構(gòu),將業(yè)務(wù)邏輯與展現(xiàn)視圖分離。復(fù)雜的項(xiàng)目涉及大量客戶端 HTML 使用 JavaScript 操作,維護(hù)起來(lái)可能很困難。在這種情況下,我們可以使用模板系統(tǒng)來(lái)提高可重用性,并簡(jiǎn)化視圖管理任務(wù)。Mustache.js 提供了一個(gè)文檔完善的模板系統(tǒng),可用于管理模板。而且,由于 Mustache 支持多種語(yǔ)言,我們無(wú)需在服務(wù)器端使用單獨(dú)的模板系統(tǒng)。本文介紹了使用 Mustache 的基礎(chǔ)知識(shí)。

      關(guān)鍵要點(diǎn)

      • Mustache.js 是一個(gè)文檔完善的模板系統(tǒng),可用于管理復(fù)雜 Web 應(yīng)用中的 HTML 模板,提高可重用性并簡(jiǎn)化視圖管理任務(wù)。
      • Mustache.js 是無(wú)邏輯的,這意味著其模板不包含任何 if-else 條件或 for 循環(huán)。它使用雙大括號(hào)表示的標(biāo)簽將數(shù)據(jù)添加到模板中。
      • Mustache 模板可以通過(guò)多種方式定義,包括內(nèi)聯(lián)方法、內(nèi)聯(lián)腳本和外部 HTML 片段。選擇哪種方法取決于項(xiàng)目的具體需求。
      • Mustache.js 是一款多功能工具,可在客戶端和服務(wù)器端使用,并支持多種語(yǔ)言。它還帶有用于管理復(fù)雜模板的標(biāo)簽,例如變量、節(jié)、函數(shù)和部分模板。

      為什么我們需要模板系統(tǒng)?

      大多數(shù)不了解模板系統(tǒng)的開發(fā)者會(huì)創(chuàng)建新的 HTML 代碼塊,并使用 JavaScript 動(dòng)態(tài)地將它們插入 DOM。一種常見的方法是將 HTML 元素指定為字符串,然后設(shè)置 innerHTML 屬性或調(diào)用 jQuery html() 方法。下面是一個(gè)示例:

      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>
      

      以上兩種方法都可以有效地將元素動(dòng)態(tài)添加到文檔中。考慮這樣一種情況:我們有一個(gè)設(shè)計(jì)精良的項(xiàng)目符號(hào)列表,需要在網(wǎng)站的三個(gè)不同類型的頁(yè)面中使用。使用這些技術(shù),我們將不得不在三個(gè)不同的位置重復(fù)列表的 HTML 代碼。這通常被認(rèn)為是不好的編碼習(xí)慣。在這種情況下,我們可以在不同位置使用預(yù)定義的模板,而無(wú)需重復(fù)代碼。Mustache.js 是一個(gè)非常流行的 JavaScript 模板引擎。由于 Mustache 提供了多種語(yǔ)言的服務(wù)器端和客戶端模板,因此我們不必?fù)?dān)心選擇單獨(dú)的模板引擎。

      Mustache.js 入門

      Mustache 是一個(gè)開源的無(wú)邏輯模板系統(tǒng),適用于 JavaScript、Ruby、Python、PHP 和 Java 等語(yǔ)言。您可以訪問(wèn) GitHub 上的官方頁(yè)面獲取庫(kù)的副本。Mustache 將模板和視圖作為創(chuàng)建動(dòng)態(tài)模板的基礎(chǔ)。視圖包含要包含在模板中的 JSON 數(shù)據(jù)。模板包含帶有模板標(biāo)簽的展現(xiàn) HTML 或數(shù)據(jù),用于包含視圖數(shù)據(jù)。前面我們提到 Mustache 是無(wú)邏輯的。這意味著模板不包含任何 if-else 條件或 for 循環(huán)?,F(xiàn)在,讓我們通過(guò)一個(gè)簡(jiǎn)單的示例開始使用 Mustache 模板。

      var dynamic_html = "<div>HighlightedAuthor</div>";
      
      document.getElementById("container").innerHTML = dynamic_html;</pre>
      

      首先,我們需要在文檔中包含 mustache.js 文件。然后,我們可以開始創(chuàng)建 Mustache 模板。在上面的示例中,我們有一個(gè)視圖,其中包含一個(gè)人的姓名和職業(yè)。然后,我們?cè)?render() 函數(shù)內(nèi)使用展現(xiàn)代碼和姓名和職業(yè)數(shù)據(jù)的標(biāo)簽。標(biāo)簽由圍繞它們的雙大括號(hào)或胡須表示?,F(xiàn)在,讓我們看看 render() 方法是如何工作的。

      渲染 Mustache 模板

      以下代碼顯示了 mustache.js 文件中 render() 函數(shù)的實(shí)現(xiàn)。可以向 render() 傳遞三個(gè)參數(shù)。前兩個(gè)參數(shù) template 和 view 是必需的。partials 可以被認(rèn)為是動(dòng)態(tài)模板,您可以將其注入到主模板中。在我們之前的示例中,我們將模板作為內(nèi)聯(lián)參數(shù)傳遞,將視圖作為第二個(gè)參數(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)方法,因?yàn)槲覀冎苯訉⒛0鍌鬟f給函數(shù)。此方法阻止了可重用模板的可能性。讓我們看看如何將模板定義為內(nèi)聯(lián)腳本模板,而不是直接傳遞給函數(shù)。

      模板作為內(nèi)聯(lián)腳本

      我們可以在 </pre>

      您可以根據(jù)需要在文檔中包含任意數(shù)量的具有不同 ID 的模板。當(dāng)您要使用模板時(shí),使用 innerHTML 獲取腳本標(biāo)簽內(nèi)的 HTML,并將其作為模板傳遞。我們的第一個(gè)示例將更改為以下代碼:
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <title>Mustache.js Inline Method</title>
        <??>
      </head>
      <body>
        <??>
        <p id="person"></p>
      </body>
      <??>
      </html></pre>
      

      如您所見,模板是單獨(dú)存儲(chǔ)的,并在需要時(shí)動(dòng)態(tài)使用。此方法增加了重用模板的可能性。但是,使用內(nèi)聯(lián)腳本會(huì)將模板的作用域限制在一個(gè)頁(yè)面上。如果您有多個(gè)頁(yè)面,則必須再次定義模板。因此,包含外部文件中的模板將是理想的解決方案——就像 CSS 一樣。

      模板作為外部 HTML 片段

      在此技術(shù)中,我們將使用 jQuery 來(lái)實(shí)現(xiàn)模板化。jQuery 提供了一個(gè)名為 load() 的函數(shù),可用于獲取外部文檔的一部分。我們將使用此方法從外部模板文件動(dòng)態(tài)加載模板。load() 函數(shù)執(zhí)行腳本而不是返回它們,因此我們不能像在前面方法中那樣在腳本標(biāo)簽內(nèi)創(chuàng)建模板。以下示例顯示了我們將要使用的外部模板文件。

      var dynamic_html = "<div>HighlightedAuthor</div>";
      
      document.getElementById("container").innerHTML = dynamic_html;</pre>
      

      我們已對(duì)模板使用 <div> 元素而不是腳本,以使其與 jQuery 的 load() 函數(shù)兼容。這里,我們有三個(gè)具有三個(gè)不同 ID 的不同模板?,F(xiàn)在,讓我們繼續(xù)在您的頁(yè)面中使用這些模板。

      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 元素中,而不是將其賦值給變量。因此,我們需要一個(gè)虛擬容器來(lái)保存模板。我已經(jīng)使用了默認(rèn)情況下隱藏的模板容器。上面的示例檢索 template1 并加載它。然后,我們可以從虛擬容器中獲取模板并將其傳遞給 Mustache 進(jìn)行渲染。這就是外部方法的工作方式。我們還可以使用 AJAX 請(qǐng)求從服務(wù)器獲取數(shù)據(jù)。

      結(jié)論

      模板引擎和框架對(duì)于管理具有動(dòng)態(tài)變化的展現(xiàn)視圖的復(fù)雜系統(tǒng)非常重要。Mustache.js 是在客戶端管理模板的最佳選擇之一。我們?cè)诒窘坛痰拈_頭解釋了為什么模板很重要。然后,我們繼續(xù)介紹使用 Mustache 模板的各種技術(shù)。現(xiàn)在,您將能夠選擇在項(xiàng)目中實(shí)現(xiàn) Mustache 模板的方法。我們已經(jīng)完成了探索使用 Mustache 模板的各種技術(shù),但是 Mustache 還帶有變量、節(jié)、函數(shù)和部分模板等標(biāo)簽,這些標(biāo)簽用于管理復(fù)雜的模板。討論每個(gè)標(biāo)簽的語(yǔ)法超出了本教程的范圍。您可以在 Mustache GitHub 頁(yè)面上找到 Mustache 標(biāo)簽的綜合指南。隨意分享您以前使用 Mustache.js 的經(jīng)驗(yàn)!

      Mustache.js 常見問(wèn)題解答 (FAQ)

      • Mustache.js 與其他 JavaScript 模板庫(kù)的主要區(qū)別是什么?

      Mustache.js 是一種無(wú)邏輯模板語(yǔ)法。這意味著它可以用于 HTML、配置文件、源代碼——任何內(nèi)容。它的工作原理是使用哈?;?qū)ο笾刑峁┑闹禂U(kuò)展模板中的標(biāo)簽。與其他 JavaScript 模板庫(kù)不同,Mustache.js 不包含任何 if 語(yǔ)句、else 子句或 for 循環(huán)。相反,它只有標(biāo)簽。一些標(biāo)簽被替換為一個(gè)值,一些什么也沒(méi)有,另一些則是一系列值。

      • 如何將 Mustache.js 用于 HTML 模板化?

      要將 Mustache.js 用于 HTML 模板化,您首先需要在 HTML 文件中包含 Mustache.js 腳本。然后,您在 <script></script> 標(biāo)簽內(nèi)定義一個(gè)模板。此模板可以包含要插入數(shù)據(jù)的占位符。這些占位符由雙大括號(hào)表示,例如 {{name}}。然后,您使用 Mustache.render() 函數(shù)使用您提供的數(shù)據(jù)呈現(xiàn)模板。

      • 我可以將 Mustache.js 與 Node.js 一起使用嗎?

      是的,您可以將 Mustache.js 與 Node.js 一起使用。為此,您需要使用 npm 安裝 mustache 包。安裝完成后,您可以在 Node.js 文件中需要它并使用它來(lái)呈現(xiàn)模板。

      • 如何使用 Mustache.js 遍歷數(shù)組?

      在 Mustache.js 中,您可以使用 {{#array}}…{{/array}} 語(yǔ)法遍歷數(shù)組。在此塊內(nèi),您可以使用 {{.}} 來(lái)引用數(shù)組中的當(dāng)前項(xiàng)。這允許您在模板中顯示數(shù)組中的每一項(xiàng)。

      • 如何在 Mustache.js 中使用條件語(yǔ)句?

      雖然 Mustache.js 是一個(gè)無(wú)邏輯模板庫(kù),不支持傳統(tǒng)的 if 語(yǔ)句,但您仍然可以使用節(jié)來(lái)獲得類似的結(jié)果。節(jié)根據(jù)數(shù)據(jù)對(duì)象中鍵的值呈現(xiàn)文本塊一次或多次。

      • 如何在 Mustache.js 中包含部分模板?

      Mustache.js 中的部分模板允許您在一個(gè)較大的模板中包含較小的模板。這對(duì)于重用公共元素(如頁(yè)眉和頁(yè)腳)非常有用。要包含部分模板,您可以使用 {{>partial}} 語(yǔ)法。

      • 如何在 Mustache.js 中轉(zhuǎn)義 HTML?

      默認(rèn)情況下,Mustache.js 會(huì)轉(zhuǎn)義數(shù)據(jù)中的 HTML,以防止 XSS 攻擊。如果您想從數(shù)據(jù)中呈現(xiàn) HTML,可以使用三重大括號(hào)語(yǔ)法,例如 {{{html}}}。

      • 我可以將 Mustache.js 用于服務(wù)器端嗎?

      是的,您可以將 Mustache.js 用于服務(wù)器端。這對(duì)于在將模板發(fā)送到客戶端之前呈現(xiàn)它們非常有用,從而減少了需要在客戶端執(zhí)行的 JavaScript 量。

      • 如何在 Mustache.js 中預(yù)編譯模板?

      在 Mustache.js 中預(yù)編譯模板可以通過(guò)減少運(yùn)行時(shí)需要完成的工作來(lái)提高性能。要預(yù)編譯模板,您可以使用 Mustache.parse() 函數(shù)。

      • 如何調(diào)試 Mustache.js 模板?

      調(diào)試 Mustache.js 模板可能很棘手,因?yàn)樵搸?kù)沒(méi)有提供很多錯(cuò)誤消息。但是,您可以使用 Mustache.parse() 函數(shù)檢查您的模板是否有效。此函數(shù)返回一個(gè)標(biāo)記數(shù)組,您可以檢查它以查看您的模板結(jié)構(gòu)是否正確。

      以上是用Mustache.js創(chuàng)建HTML模板的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

      本站聲明
      本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

      熱AI工具

      Undress AI Tool

      Undress AI Tool

      免費(fèi)脫衣服圖片

      Undresser.AI Undress

      Undresser.AI Undress

      人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用于從照片中去除衣服的在線人工智能工具。

      Clothoff.io

      Clothoff.io

      AI脫衣機(jī)

      Video Face Swap

      Video Face Swap

      使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費(fèi)的代碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      功能強(qiáng)大的PHP集成開發(fā)環(huán)境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級(jí)代碼編輯軟件(SublimeText3)

      Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

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

      JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

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

      如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

      JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

      JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

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

      為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

      PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

      JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

      javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

      什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

      事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

      Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

      Java和JavaScript是不同的編程語(yǔ)言。1.Java是靜態(tài)類型、編譯型語(yǔ)言,適用于企業(yè)應(yīng)用和大型系統(tǒng)。2.JavaScript是動(dòng)態(tài)類型、解釋型語(yǔ)言,主要用于網(wǎng)頁(yè)交互和前端開發(fā)。

      See all articles