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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
js实现网站首页图片滚动显示
Feb 04 Javascript
jQuery实现商品活动倒计时
Oct 16 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
Jun 12 Javascript
JS实现六位字符密码输入器功能
Aug 19 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
Oct 08 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
JavaScript直接调用函数与call调用的区别实例分析
May 22 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
swfupload 多文件上传实现代码
2008/08/27 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
javascript eval函数深入认识
2009/02/21 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
Javascript缓存API
2016/06/14 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
使用django自带的user做外键的方法
2020/11/30 Python
python基于openpyxl生成excel文件
2020/12/23 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
携程英文网站:Trip.com
2017/02/07 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
单位委托函范文
2015/01/29 职场文书
七一晚会主持词
2015/06/29 职场文书
工商局调档介绍信
2015/10/22 职场文书
2019同学聚会主持词
2019/05/06 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript