应用背景
我们在做项目时,为了使页面模块高度复用,使用页面模板是必须的,我想大家通常可能会新建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. java8中的Stream

    Collection.stream() / parallelStream() 1. Stream 1)Filter    stringCollection .stream().filter((s) - ...

  2. [Android]天气App 2 项目搭建

       对于天气App,为了简化一些功能,暂时模仿MUUI系统提供的那个App.    本项目需要引入本人经常使用的一个工具库DroidTool,这个是本人根据工作中,收集到一些工具类,下载地址.    ...

  3. Linux Centos 7 使用yum安装 mysql5.7 (实验成功)

    第一部分:安装Mysql5.7 1.下载YUM库 shell > wget http://dev.mysql.com/get/mysql57-community-release-el7-7.no ...

  4. Shell学习笔记 - 循环语句

    一.for循环 1. 语法格式1 for 变量 in 值1 值2 值3 ... do 程序 done 说明:程序将遍历所有的值,赋值给变量,然后在执行程序.也就是说,后面接多少个值,程序就循环多少次. ...

  5. 【java.math.BigInteger】常用函数

    1. /* 返回此BigInteger的函数正负号. 此方法返回-1,0或1作为此BigInteger的值对应是负,零或正数. */ java.math.BigInteger.signum(BigIn ...

  6. hdu 4744 最小费用流

    #include <cstdio> #include <queue> #include <cstring> #include <cmath> #defi ...

  7. UWP源码——Unit Test

    之前我们讨论了涨姿势UWP的RSS数据源获取,以及作为文件存储到本地,再将数据转化成Model对象.这部分非UI的内容非常适合添加Unit Test.不涉及UI的话,UT写起来简单高效,很是值得投入一 ...

  8. Matlab之画图

    1.设置对数坐标 set(gca,'XScale','log','YScale','log'); 2.加网格 grid on; 3.加log对齐网格 set(gca,'XScale','log','Y ...

  9. 微软的COM中GUID和UUID、CLSID、IID

    摘自:http://blog.csdn.net/zhongguoren666/article/details/6711396 当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全 ...

  10. Spring IoC容器的设计——BeanFactory应用场景

    1.BeanFactory提供的是最基本的IoC容器的功能,关于这些功能定义,我们可以在接口BeanFatory中看到. 2.BeanFactory接口定义了IoC容器最基本的容器的形式,并且提供了I ...