偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用JS模板引擎、面向?qū)ο笠约笆纠a

移動(dòng)開(kāi)發(fā)
頁(yè)面邏輯一旦復(fù)雜,比如需要有if判斷或者多層循環(huán)時(shí),這種連接字符串的方式就相形見(jiàn)絀了,而這也就催生出了JS模板引擎。通過(guò)上面這些工具的組合,我們有了模塊的概念,有了模板引擎,有數(shù)據(jù)的加載。最終還是要通過(guò)javascript將這一切組織在一起并加入應(yīng)用所需要的邏輯。為了能最大限度的復(fù)用代碼,用面向?qū)ο蟮姆绞饺ソM織內(nèi)容是比較好的選擇。

數(shù)據(jù)載入后,最終都會(huì)以某種形式顯示在頁(yè)面上。簡(jiǎn)單情況,我們可能會(huì)這樣做:

  1. $('body').append('<div>' + data.name + '</div>'); 

如果頁(yè)面邏輯一旦復(fù)雜,比如需要有if判斷或者多層循環(huán)時(shí),這種連接字符串的方式就相形見(jiàn)絀了,而這也就催生出了JS模板引擎。

主流的JS模板引擎有underscore.js,JadeEJS等等,可以橫向?qū)Ρ纫幌逻@些JS模板引擎的優(yōu)缺點(diǎn)。

對(duì)于相對(duì)簡(jiǎn)單的頁(yè)面邏輯(只需要支持if和for/each)來(lái)說(shuō),我更傾向選用輕巧的underscore.js或者JavaScript Templates。

在當(dāng)前例子中,使用underscore.js生成列表就非常簡(jiǎn)單了,頁(yè)面模板為:

  1. <ul data-role="listview" data-inset="true"> 
  2. <script id="tmpl-restaurants" type="text/template"> 
  3.     <% _.each(data, function(restaurant) { %> 
  4.         <li> 
  5.             <a href="#" data-rel="back" data-value="<%- restaurant.name%>"><%- restaurant.name%></a> 
  6.         </li> 
  7.     <% }); %> 
  8. </script> 
  9. </ul> 

調(diào)用引擎:

  1. $("#tmpl-restaurants").replaceWith( 
  2.     _.template($("#tmpl-restaurants").html(), { 
  3.         data : restaurants 
  4.     }) 
  5. ); 

面向?qū)ο笈c模塊化

通過(guò)上面這些工具的組合,我們有了模塊的概念,有了模板引擎,有數(shù)據(jù)的加載。最終還是要通過(guò)javascript將這一切組織在一起并加入應(yīng)用所需要的邏輯。為了能***限度的復(fù)用代碼,用面向?qū)ο蟮姆绞饺ソM織內(nèi)容是比較好的選擇。

JavaScript雖然原生并不支持面向?qū)ο螅且廊豢梢酝ㄟ^(guò)很多方式模擬出面向?qū)ο蟮奶匦?。例子中采用了我個(gè)人比較喜歡的一種方式是:

  1. var foodOrder = function(ui, options){ 
  2.     //構(gòu)造函數(shù) 
  3.     this.init(ui, options); 
  4. foodOrder.prototype = { 
  5.    defaultUI :  { 
  6.        form : '#form-order' 
  7.    } 
  8.    , defaultOptions : { 
  9.        debug : false 
  10.    } 
  11.    , init : function(ui, options){ 
  12.        this.ui = $.extend({}, this.defaultUI, ui); 
  13.        this.options = $.extend({}, this.defaultOptions, options); 
  14.    } 
  15. var order = new foodOrder({ 
  16.     form : '#real-form' 
  17. }, { 
  18.     debug : true 
  19. }); 

將頁(yè)面的UI元素以及配置項(xiàng)目抽象出來(lái),在實(shí)際構(gòu)造對(duì)象時(shí)則可以通過(guò)入口參數(shù)復(fù)寫(xiě),可以分離整個(gè)項(xiàng)目的邏輯與UI,使處理的方式更加靈活。

Web App***實(shí)踐示例代碼

依據(jù)此Web App開(kāi)發(fā)***實(shí)踐所開(kāi)發(fā)的App,基于HTML5 Boilerplate、requireJS、jQuery Mobile、Underscore.js,后端邏輯用jStorage模擬實(shí)現(xiàn)。完成后的成品在此。所有代碼可以在github查看。希望大家也能夠按照本系列教程開(kāi)發(fā)出好用的Web App。

責(zé)任編輯:徐川 來(lái)源: avnpc.com
相關(guān)推薦

2014-04-30 12:04:43

Velocity.js模板引擎

2017-01-04 15:22:57

TrimPath模板引擎

2019-11-18 17:05:02

JavaScript面向?qū)ο蟪绦蚓幊?/a>Java

2016-10-11 15:42:08

2023-01-10 09:38:09

面向對(duì)象系統(tǒng)

2021-11-08 07:48:48

Go語(yǔ)言對(duì)象

2023-11-10 09:16:45

SpringBootThymeleaf

2010-03-18 13:43:40

python面向?qū)ο?/a>

2009-06-15 14:59:31

Java代碼Java

2021-02-03 09:36:36

Python

2009-01-04 09:08:30

面向?qū)ο?/a>繼承接口

2013-03-11 09:23:22

Go語(yǔ)言面向?qū)ο?/a>

2016-11-01 20:26:47

前端模板underscoreWeb

2009-10-09 10:52:43

ASP.NET模板引擎

2024-02-29 08:02:00

2022-07-30 23:41:53

面向過(guò)程面向?qū)ο?/a>面向協(xié)議編程

2009-11-13 14:22:11

ADO.NET Dat

2022-08-16 07:57:30

架構(gòu)

2017-03-10 18:29:17

Androidfreemarker應(yīng)用

2010-07-20 09:33:14

Perl方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)