应用背景
我们在做项目时,为了使页面模块高度复用,使用页面模板是必须的,我想大家通常可能会新建MVC的项目,然后在页面中使用Razor引擎,新建Helper模板类,前后台代码的混写,简洁高效,一切都是那么的行云流水,我就是这么干的! 直到有一天,当我快做完一个项目时,经理对我说,你不要直接访问数据库,用接口就行了,是啊,说的多轻松,但对程序员来说这就是晴天霹雳啊,因为这意味着你这个项目的流程彻底改变。

 变成

初看起来好像没什么大的问题,砍掉整个后台好像还方便了不少,但还是有些问题,因为接口返回的是json数据,所以会遇到下面的问题:

 
 
即你怎么把json数据传给你的Helper模板? 看来Razor是不行了,那怎么办呢? 在js方法中拼凑html字符串,类似

 var html = "<div style='display: inline' id='" + id + "'>" +
"<span>" + obj.title + "</span><img onclick=\"removeregion('" + id + "')\" src='../images/delete.gif'>" +
"</div>";

这当然可以,但如果页面稍微复杂一些,在各个标签中都有事件,方法,并且方法还要携带相关参数,再加上相应的css样式,业务逻辑之类的,这一大锅混在一起,你觉得你还能这么干吗?

 
 
即使在页面很简单的时候,我也从没考虑过用这种作死的办法来解决问题。难道就没有一种类似Razor的前台的东东,可以使数据、业务逻辑、页面呈现清晰完美的结合在一起吗?答案是肯定的,我们的前辈们早就遇到过这类问题,并且他们已经为我们提供了非常好的解决方案:
 
 
HandlerBars是一个非常给力的前端语义构建模板,能帮助你快速高效的搭建出自己的页面模型。  
 
简单使用:
 
1.新建MVC项目 

2.下载HandleBars.js.(官网的好像失效了,可以去GitHub下载,或直接NuGet)   

 
 
3.引用
 
 
 
4.建立模板 

注意type的类型

5.编译并输出 我们还可以带参数

 
 
 
 
 
 
有效组织:
 
我在学习Handlebars时发现网上的很多教程只是为了写教程而写教程(废话啊),我的意思是说没有更多的从实际开发的角度去帮助大家理解和使用。 就像上面的例子(虽然很水,但能说明问题即可),你可以看到,我的模板、js 、包括之后可能有的css几乎都是写一起的,这在实际的项目开发中是很不可取的,怎样更好的使各个部分相互独立,互不影响,且又能更好的组织和使用呢? 经过我的大量测试和试验发现了以下三个结论:
 
1.handlebars的模板必须在使用前存在于dom中,即如果你要在一个分部视图中调用模板,那么在你这个分部的视图或它的父级视图中必须存在你要调用的模板。
 
2.在handlebars模板中不能像Razor那样嵌入js。
 
3.模板无法像Razor 那样放在App_Code中直接访问。
 
好了,这里的关键就是怎样更好的组织模板文件呢!针对这三个特点,我们可以在使用时这样组织:
 
1.新建模板文件夹,里面存放handlebars模板(就是一个cshtml文件)。
       
你可以看到,我的一个模板文件里只存了一个模板,当然如果你能保证不冲突的话,你也可以在一个文件中写多个。
 
2.将该模板用到的js,css单独存放于一个文件(这个不用说,大家都知道!)。
 
 
3.在Bundle中一次将你要用到的js,css打入,并在母版页中Render。
 
4.关键就是这一步了,在你要用到模板的页面或父级页面导入你在第1步创建的模板文件
 
然后再在js里引用,编译,输出就像上面那个很水的demo一样。
 
这样我们的模板、js、css就都分开了,层次结构也更清晰,一目了然。
 
以上就是个人在工作学习中的一点经验和见解,和大家分享一下,希望能帮到大家,本人菜鸟一名,若有不对之处,欢迎大家批评指正!    

JS模板Handlebars的使用和有效组织的更多相关文章

  1. Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整

    Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...

  2. JS模板引擎handlebars.js的简单使用

    handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...

  3. js模板引擎之 Handlebars 基本用法

    模板引擎比较久远的一个技术,常见的模板引擎有 baiduTemplate(百度)\artTemplate(腾讯)\juicer(淘宝)\doT\ tmpl\ handlebars\ easyTempl ...

  4. js模板引擎--artTemplate

    js模板引擎--artTemplate 以前研究过一段时间的handlebars,但因为其渲染性能略逊于腾讯的artTemplate(在artTemplate的GitHub官网上有推荐的性能测试地址) ...

  5. doT js 模板引擎【初探】要优雅不要污

    js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...

  6. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  7. 《Ext JS模板与组件基本知识框架图----模板》

    最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...

  8. 调研js模板引擎

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

  9. js模板引擎介绍搜集

    js模板引擎越来越多的得到应用,如今已经出现了几十种js模板引擎,国内各大互联网公司也都开发了自己的js模板引擎(淘宝的kissy template,腾讯的artTemplate,百度的baiduTe ...

随机推荐

  1. Java Script基础(四) BOM模型

    一.BOM模型 BOM模型(Browser Object Model),也称为文档对象模型,它包含浏览器相关的属性和方法,例如操作,前进后退按钮,控制地址栏,关闭浏览器窗口,打开新窗口等等.它包含的对 ...

  2. Linux查看和改变网卡的一些信息

    昨天遇到一个问题,就是网卡的速率问题.本身是1000Mb,可是显示为10Mb,这个问题对于我这个菜鸟来说是个难以解决的问题.当然,第一件事是查询Linux中哪个命令能 改变网卡的速率. localho ...

  3. 剑指Offer37 二叉树深度与平衡二叉树判断

    /************************************************************************* > File Name: 37_TreeDe ...

  4. Android 软键盘操作

    <activity android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", ...

  5. vijos 1426

    P1426兴奋剂检查 Accepted 标签:中学生论坛[显示标签]     背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外…… ...

  6. JavaScript之放大镜效果

    在网上也浏览过许多关于JavaScript放大镜效果的文章,有的代码解释得些隐晦难懂,看的我头有点晕晕的╮(╯﹏╰)╭,我的心情是这样的: 吐槽完了,我们动动小鼠标,当鼠标经过下面这张美女图片时就实现 ...

  7. jquery实现点击页面空白隐藏指定菜单

    注意:dmenu是一个div的class名哦 代码如下 复制代码 $('html,body').click(function(e){  if(e.target.id.indexOf("dme ...

  8. Cocos2d-JS中的文本菜单

    文本菜单是菜单项只能显示文本,文本菜单类包括了cc.MenuItemLabel.cc.MenuItemFont和cc.MenuItemAtlasFont.cc.MenuItemLabel是个抽象类,具 ...

  9. AMQ学习笔记 - 15. 实践方案:基于ActiveMQ的统一日志服务

    概述 以ActiveMQ + Log4j + Spring的技术组合,实现基于消息队列的统一日志服务. 参考:Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 与参考文章的比较 ...

  10. 1.配置EditPuls-编译和运行java程序

    1.工具>配置自定义工具 2.添加工具>程序 1).编译java程序 2).运行java程序