欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

javascript 模板引擎

系統 4012 0

推薦五款流行的JavaScript模板引擎

摘要:        Javascript 模板引擎作為數據與界面分離工作中最重要一環,受到開發者廣泛關注。本文通過開發實例解析五款流行模板引擎:Mustache、Underscore Templates、Embedded JS Templates、HandlebarsJS、Jade templating。

 近日一位20歲的開發者Jack Franklin在《          The top 5 JavaScript templating engines            》一文中向開發者們推薦了5款流行的JavaScript模板引擎。下面為該文的譯文。
 

當你創建JavaScript應用時,你必然會用到JavaScript模板。當對HTML進行更新時,你可使用模板來代替庫(如jQuery),使用模板可以大大簡化你的代碼。該文將例舉當前較流行的一些模板庫。      

 1.          Mustache            

張軍博客  

Mustache通常被稱為JavaScript模板的基礎。另一個流行的解決方案Hanldebars實際上就是基于Mustache構建而成的。這并不意味著Mustache是一個不好的模板解決方案。下面例舉一例:

[js]   

  1.  Mustache.render(  "Hello, {{name}}"  , { name:   "Jack"   });  

  2.  // 返回: Hello, Jack    

一旦在頁面中包含了Mustache,你就可以訪問全局對象“Mustache”。你可使用其中最主要的方法“render”,它包含兩個參數。首個參數是實際的模板,第二個參數則為需要傳入的參數值。

上例中,你可以看見“{{name}}”。其中的“{{}}”實際上為Mustache的語法,表示一個占位符。當Mustache對其進行編譯時,它將在傳入的對像中尋找“name”屬性,并用該屬性的值(該例中為“Jack”)來代替“{{name}}”。

在這里,模板只為一個字符串,但如果你有一個更復雜的模板,該方法可能就不適用了。通常的解決方案是將模板放在“script”標簽中:

[js]    

  1.  <script type=  "text/x-mustache"   id=  "template"  >  

  2.     <p>Hello, {{name}}</p>            

  3.   </script>            

然后,我們可以訪問的script標簽的內容。例如,使用jQuery,它很容易實現:

[js]       

  1.  var   temp = $(  "#template"  ).html();  

  2. Mustache.render(temp { name:   "Jack"   });  

  3.  // 返回: <p>Hello, Jack</p>    

給“script”一個瀏覽器無法理解的“type”屬性,瀏覽器就會忽略該Script,不將它作為JavaScript,也不會執行它。

你也可在模板中使用循環,如下面這個模板:

[js]   

  1.  {{#people}}  

  2.   {{name}}            

  3. {{/people}}            

傳遞數據:

[js]       

  1.  { people: [ { name:   "Jack"   }, { name:   "Fred"   } ] }  

你將得到“JackFred”字符串。

Mustache還有更多的功能,點擊      這里        查看詳情。

2.  Underscore Templates  

 

Underscore提供了各種各樣的有用的方法,也提供了簡單的模板。它的語法與Mustache稍有不同。下面為一個簡單案例:

[js] 

  1.  _.template(  "Hello, <%= name %>"  , { name:   "Jack"   });  

  2.    // 返回:Hello, Jack    

如果你曾經使用過Embedded Ruby(縮寫為ERB),你就會對該語法更為熟悉。“<%=name%>”表示無論“name” 是什么值,都應該輸出在“<%=name%>”的位置。Underscore同樣有循環與條件語句,但與Mustache同樣稍有不同。

[js]

  1.  var   template =   "<% _.each(people, function(name) { %> <li><%=   name %></li> <% }); %>"    

  2. _.template(template, { people: [  "Jack"  ,   "Fred"  ] } );  

在Underscore模板中,你可以在“<% %>”是插入任何JavaScript。注意,“<%= %>”用于輸 出,<% %>用來包含JavaScript。這意味著你在JS中使用的任何形式的循環與條件語句同樣可以在Underscore中使用。

了解Underscore更多功能,請點擊      這里        查看。

3.  Embedded JS Templates  

 

Embedded JS        (EJS) 來源于ERB模板,且與ERB有很多相似之處。它有著與ERB相同的Tag,且包含很多相同的功能。

EJS的特別之處在于,你需要把模板存于單獨文件中,并將文件名傳遞給EJS。它會加載該文件,并返回HTML。

[js] 

  1.  // in template.ejs    

  2.   Hello, <%= name %>            

  3.  // in JS file    

  4.     new   EJS({ url:   "template.ejs"   }).render({ name:   "Jack"   });  

  5.  // 返回: Hello, Jack    

注意,你可以加載文本模板:

[js]  

  1.  new   EJS({ text:   "Hello, <%= name %>"   }).render({ name:   "Jack"   });  

下面將介紹如何進行循環,以數組“People”為例,并在網站上鏈接到他們的個人頁面:

[js]

  1.  // template.ejs    

  2.   <ul>            

  3.     <%   for  (  var   i = 0; i < people.length; i++) { %>  

  4.       <li><%= link_to(people[i],   "/profiles/"   + people[i]) %></li>  

  5.     <% } %>            

  6.   </ul>            

  7.  // in JS file    

  8.  new   EJS({ url:   "template.ejs"   }).render({ people: [   "Jack"  ,   "Fred"   ] })  

  9.  // Each rendered <li> will look like:    

  10. <li><a href=  "/profiles/Jack"  >Jack</a></li>  

這與Underscore 有些相似,但要注意“link_to”的使用。它是EJS定義的一個Helper,以便鏈接更容易使用。

了解更多EJS,請關注      EJS官方網站        。

4.  HandlebarsJS   

Handlebars為最流行的模板引擎之一,構建于Mustache之上。適用于Mustache模板的功能同樣適用于Handlebars模板。同時,Handlebars還增加了很多Helper。其中之一是“With”。

[js] 

  1.  // with this template:    

  2.     var   source =   "{{#with author}} <h2>By {{firstName}} {{lastName}}</h2> {{/with}}"  ;  

  3.     var   template = Handlebars.compile(source);  

  4.     var   html = template({ author: { firstName:   "Jack"  , lastName:   "Franklin"   } });  

  5.  // returns: <h2>By Jack Franklin</h2>    

注意,Handlebars編譯器的工作方式略有不同。首先,你把該模板傳遞給“Handlebars.compile”,它會返回一個函數。你將 包含數據的對象傳遞給該函數,該函數將返回HTML。“{#with}}”Helper取得一個對象,并允許你在其中向該對象傳遞屬性。但不是采用以下形 式:

[js] 

  1.  {{ author.firstName}} {{author.lastName}}  

而是下面這種形式

[js]  

  1.  {{#  with   author}} {{firstName}} {{lastName}} {{/  with  }}  

這樣可以節約輸入,尤其當你十分頻繁地使用它時。

Handlebars也提供了“each”Helper: 

[js]

  1.  var   source =   "{{#each people}} {{name}} {{/each}}"  ;  

  2.     var   template = Handlebars.compile(source);  

  3.     var   html = template({ people: [{ name:   "Jack"   }, { name:   "Fred"   }] });  

  4.     //返回: "JackFred"    

此外,你還可以使用自己的方法來擴展Handlebars,具體方法可參與      該文檔        。

5.  Jade templating  

 

隨著Node.js的流行及大量Web應用構建于它之上,現在已有很多模板被設計用于服務器端。Jade模板與我們目前為止看到的大不相同,它依靠大量的縮進與空格。下面看一例:

[js] 

  1.  // template.jade    

  2.   p            

  3.     | Hello,            

  4.     = name            

  5.  // JS    

  6.   jade.renderFile(  "template.jade"  , { name:   "Jack"   },   function  (err, result) {  

  7.     console.log(result);            

  8.       // logs: Hello, Jack    

  9.   });            

首次看到Jade可能會讓你不舒服,但你會很快適應它。在“p”下面縮進兩個字符,表明這兩個字符存在于“p”內。“|”用來告知Jade,該行是需要輸出的純文本;“=”用來告知Jade尋找一個名為“name”的變量。      

我們同樣可以在Jade中使用循環:

[js]

  1.  each person   in   people  

  2.     li=person            

調出存儲名字的數組:{ people: [ "Jack", "Fred" ]},它將輸出:      

 

[html]

  1.  <  li  >  Jack  </  li  >  <  li  >  Fred  </  li  >    

Jade具有很多其他模板所不具有的功能。它也可以做諸如輸出Script標簽此類的事:

[js] 

  1.  script(type=  "text/javascript"  , src=  "myfile.js"  )          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 三级视频网站 | 99激情视频| 久草在线视频资源站 | 日韩免费电影 | 婷婷亚洲综合五月天小说 | 亚洲性生活免费视频 | 国产成人综合网在线观看 | 天天操天天射天天爽 | 欧美最新一区二区三区四区 | 国产黄色在线观看 | 色站综合 | 中文字幕在线一区二区三区 | 国产在线精品香蕉综合网一区 | 欧美精品一区二 | 国产精品久久久久久久一区探花 | 亚洲高清中文字幕一区二区三区 | 亚洲伊人网站 | av资源首页 | 亚洲有码转帖 | 日韩av第一页 | 乱码中文字幕人成在线 | 国产精品久久av | 毛片在线看片 | 亚洲a级大片 | 日本精品一区二区三区在线 | 亚洲精品久久久蜜桃 | 亚洲成人福利在线观看 | 起碰97 | 香蕉av777xxx色综合一区 | 午夜影视网 | 日韩在线无 | 欧美精品欧美精品系列 | 国产浮力第一浮力 | 欧美日韩久久 | 免费一级毛片不卡不收费 | 精品久久久久久久久久 | 男人阁久久 | 国产福利网| 夜夜摸夜夜爽 | 色综合天天综合中文网 | 欧美屁股 |