JavaScript模板入门介绍


Posted in Javascript onSeptember 26, 2012

比如要在一个列表中利用ajax插入一个li的时候,我会直接把数据跟html标签拼接成一句完整的html,然后插入到ul中。无论数据是从服务器端拿回的,或者是从用户的input输入中拿到的——无论哪种方法都是一样。
这个拼接过程放在JavaScript文件中,显得非常不优雅。如果还把style也放在JavaScript中,那数据、结构还有样式整个就是一锅粥了,要维护这样的代码会让人想自杀。最过分的就是把页面上最终要生成的HTML都直接放在服务器端,ajax吐出数据就包含了<li>标签,这样的页面几乎不存在扩展性了,修改一个前台样式都要涉及后台代码的修改。

后来我们知道了不要在JavaScript中对DOM进行style定制,而是只需要在CSS文件中定义好对应的class,然后在JavaScript中使用这个class就好。

接下来我们要做的就是用JavaScript模板把HTML结构(在这个案例中,是<li>标签)也从JavaScript中分离。

市面上的JavaScript模板很多了,以handlebars这个优秀的模板为例吧:

我们在页面的html中定义模板:

<script id="list-template" type="text/x-handlebars-template"> 
<li>{{title}}</li> 
</script>

然后在我们的逻辑JavaScript代码中可以把数据拼接到这一模版中:
var source = $("#list-template").html(); //模板源,一般放在html的script中,这里我们使用jQuery,也可以使用其它方法直接获得内容字符串 
var template = Handlerbars.compile(source); //编译生成一个模板template 
var context = {title:"This is a todo item"} //获得数据,数据一般从ajax或者input中取得 
var html = template(context); //数据+模板=新的html

这就是基本的 用法了,更多逻辑可以参考官方文档:http://handlebarsjs.com/
Javascript 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
JavaScript中Function详解
Feb 27 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
Apr 15 Javascript
Javascript之BOM(window对象)详解
May 25 Javascript
jquery实时获取时间的简单实例
Jan 26 Javascript
基于node.js之调试器详解
Aug 22 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
vue 如何使用递归组件
Oct 23 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 #Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 #Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 #Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 #Javascript
js DOM 元素ID就是全局变量
Sep 20 #Javascript
JavaScript NaN和Infinity特殊值 [译]
Sep 20 #Javascript
JavaScript 更严格的相等 [译]
Sep 20 #Javascript
You might like
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
新手入门常用代码集锦
2007/01/11 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
ionic3 懒加载
2017/08/16 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python基于socket函数实现端口扫描
2020/05/28 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
实习生自我鉴定
2013/12/12 职场文书
政风行风整改方案
2014/10/25 职场文书
师范生见习报告范文
2014/11/03 职场文书
2014年党小组工作总结
2014/12/20 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
会计岗位工作总结
2015/08/12 职场文书
导游词之桂林山水
2019/09/20 职场文书
Python if else条件语句形式详解
2022/03/24 Python
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis