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 相关文章推荐
Javascript的匿名函数小结
Dec 31 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
纯JS实现的批量图片预览加载功能
Aug 14 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
May 03 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 Javascript
微信小程序实现吸顶效果
Jan 08 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微信开发之有道翻译
2016/06/23 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
浅谈Vue.use的使用
2018/08/29 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
Python装饰器语法糖
2019/01/02 Python
Python字符串的一些操作方法总结
2019/06/10 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
仓库管理专业个人自我评价范文
2013/11/11 职场文书
工作表现评语
2014/01/19 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
高三霸气励志标语
2014/06/24 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android