应用背景
我们在做项目时,为了使页面模块高度复用,使用页面模板是必须的,我想大家通常可能会新建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. iOS中的加密方式 与 文件解压缩

    1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ...

  2. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  3. 各种"居中"

    先看效果 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> < ...

  4. POJ 1751 Highways (最小生成树)

    Highways Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  5. 剑指Offer04 重建二叉树

    代码有问题 /************************************************************************* > File Name: 04_ ...

  6. 剑指Offer06 旋转数组的最小值

    /************************************************************************* > File Name: 06_MinNum ...

  7. 把当前时间(NSDate)转为字符串 - 获取当前时间的Day

    1.把当前时间转为字符串 (NSDate与北京时间相隔8小时,格式化之后就是北京时间) NSDate *date = [NSDate date]; NSDateFormatter *dateForma ...

  8. IO输入输出 2

    编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt pa ...

  9. 第一个过滤器Filter

    过滤器实现Filter接口javax.servlet.Filter package com.henau.example; import java.io.IOException; import java ...

  10. springMVC第一课--配置文件

    刚学springMVC,记录下学习过程,供以后查阅(githup源码). 1,新建一个web工程.(其他按常规来) 如下:添加applicationContext.xml,webmvc-servlet ...