使用JS模板引擎、面向对象以及示例代码

数据载入后,最终都会以某种形式显示在页面上。简单情况,我们可能会这样做:

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

如果页面逻辑一旦复杂,比如需要有if判断或者多层循环时,这种连接字符串的方式就相形见绌了,而这也就催生出了JS模板引擎。

主流的JS模板引擎有underscore.jsJadeEJS等等,可以横向对比一下这些JS模板引擎的优缺点

对于相对简单的页面逻辑(只需要支持if和for/each)来说,我更倾向选用轻巧的underscore.js或者JavaScript Templates

在当前例子中,使用underscore.js生成列表就非常简单了,页面模板为:

 
 
  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> 

调用引擎:

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

面向对象与模块化

通过上面这些工具的组合,我们有了模块的概念,有了模板引擎,有数据的加载。最终还是要通过javascript将这一切组织在一起并加入应用所需要的逻辑。为了能最大限度的复用代码,用面向对象的方式去组织内容是比较好的选择。

JavaScript虽然原生并不支持面向对象,但是依然可以通过很多方式模拟出面向对象的特性。例子中采用了我个人比较喜欢的一种方式是:

 
 
  1. var foodOrder = function(ui, options){ 
  2.     //构造函数 
  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. }); 

将页面的UI元素以及配置项目抽象出来,在实际构造对象时则可以通过入口参数复写,可以分离整个项目的逻辑与UI,使处理的方式更加灵活。

Web App最佳实践示例代码

依据此Web App开发最佳实践所开发的App,基于HTML5 Boilerplate、requireJS、jQuery Mobile、Underscore.js,后端逻辑用jStorage模拟实现。完成后的成品在此。所有代码可以在github查看。希望大家也能够按照本系列教程开发出好用的Web App。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值