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 相关文章推荐
js阻止事件追加的具体实现
Oct 15 Javascript
jQuery中[attribute=value]选择器用法实例
Dec 31 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
简单实现jQuery上传图片显示预览功能
Jun 29 jQuery
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
jquery实现左右轮播切换效果
Jan 01 jQuery
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
浅谈vue加载优化策略
Mar 19 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
layui原生表单验证的实例
Sep 09 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 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 和 MySQL 基础教程(一)
2006/10/09 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
YII中assets的使用示例
2014/07/31 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
onpropertypchange
2006/07/01 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实现目录树生成示例
2014/03/28 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
安装python及pycharm的教程图解
2019/10/10 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
python实现手势识别的示例(入门)
2020/04/15 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
二年级语文教学反思
2014/02/02 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
市场策划求职信
2014/08/07 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android