说明:模板引擎主要针对于渲染DOM,取代了字符串拼接,用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms,

这里配置一个在线DEMO,简单说明下handlebars.js的基本用法,需要根据获取的数据去渲染,就会用到循环、判断

1、each,循环、可以嵌套

2、if,判断、可以嵌套

3、hepler,对于复杂的逻辑判断没法起作用,自己注册一个helper参与判断

handlebars.js官网

在线DEMO移动端

详细可以看上面DEMO里的main.js

/*
* @Author: wangjianfei
* @Date: 2017-05-16 16:10:25
* @Last Modified by: wangjianfei
* @Last Modified time: 2017-05-16 18:57:02
*/ 'use strict';
// AJAX
var xhrRequest=new XMLHttpRequest();
xhrRequest.open('GET','http://wjf444128852.github.io/json-datas/degula.json');
xhrRequest.onload=function(){
if(xhrRequest.status>=200&&xhrRequest.status<400){
var data=JSON.parse(xhrRequest.responseText);
// 1 定义用户列表
var users=data.data.users;
// 1.1 重新排列数据
sortData(users);
// 2 判断是否正在直播
var isLiving=data.data.my;
// console.log(data);
}else{
console.log('The server returned an error.');
}
}
xhrRequest.onerror=function(){
console.log('error!');
}
xhrRequest.send(); // 1 把人員按照積分从高到底排列
function sortData(lists){
for(var n=1;n<lists.length;n++){
for(var k=0;k<lists.length-1;k++){
var max=lists[k].score;
var nextCount=lists[k+1].score;
if(nextCount>max){
var preData=lists[k];
lists[k]=lists[k+1];
lists[k+1]=preData;
}
}
}
// 创建DOM,渲染data
createHTML(lists);
}
//1.3.01 注册一个Handlebars Helper:addOne,用来将索引+1,因为默认是从0开始的
Handlebars.registerHelper("addOne",function(index,options){
return parseInt(index)+1;
}); // 1.3.06 注册helper:compare,用来比较判断不同的显示内容
Handlebars.registerHelper("compare",function(temp,options){
if(temp==1){
//满足条件执行
return '<i class="promotion"></i>';
}else if(temp==0){
   //不满足执行{{else}}部分
return '<i class="nothing"></i>';
  }else if(temp==-1){
return '<i class="out"></i>';
}
}); // 1.3 创建DOM函数
function createHTML(userData){
console.log(userData);
var usersList=[
'{{#each this}}',
'<li>',
// 01 名词
'<b>',
// 使用注册的Helper
'{{addOne @index}}',
'.</b>',
// 02 头像
'<div class="main-img" data-direction={{stream_direction}} data-livekey={{live_key}} data-liveurl={{live_url}} data-nickname={{nickname}} data-pfid={{pfid}} data-liveid={{live_id}}>',
'<img src="{{headimg}}" alt="" />',
// 根据live_id是否正在直播
'{{#if live_id}}',
'<span></span>',
'{{/if}}',
'</div>',
// 03 用户名字
'<span>',
'{{nickname}}',
'</span>',
// 04 用户积分
'<b class="score">',
'{{score}}',
'</b>',
// 05 用户票数
'<b class="ticket">',
'{{count}}',
'</b>',
// 06 是否晋级、淘汰、败部
// 注册
'{{#compare promotion}}',
'{{/compare}}',
'</li>',
'{{/each}}'
].join('');
var usersHtml=Handlebars.compile(usersList)(userData);
var containerBox=document.getElementById('users-one');
// 追加到DOM树上
containerBox.innerHTML=usersHtml;
//
addEvent();
} //2 addEvent 绑定事件
function addEvent(){
// var allUsers=document.getElementsByClassName('main-img');
var allUsers=getDom('.main-img');
// console.log(allUsers);
for(var i=0,leng=allUsers.length;i<leng;i++){
var lists=allUsers[i];
lists.addEventListener("click",function(e){
event.preventDefault();
event.stopPropagation();
//
var pfid=this.getAttribute("data-pfid");
var nickname=this.getAttribute('data-nickname');
var liveid=this.getAttribute('data-liveid');
var liveurl=this.getAttribute('data-liveurl');
var livekey=this.getAttribute('data-livekey');
var direction=this.getAttribute('data-direction');
// console.log(liveid);
// handlebars.js 默认把值为null去除了,即把为null的替换为:'',所以此时不能用!=null判断了
// if(liveid!=null){
if(liveid){
// 进入直播间
// h5toRoom(pfid,nickname,liveid,liveurl,livekey,direction);
alert("进入直播间");
// 如果没在直播,进入个人主页
}else{
// h5toHomepage(pfid,nickname);
alert("进入个人主页");
}
// console.log(this);
});
}
} //3 getDom 获取DOM
function getDom(selector){
return document.querySelectorAll(selector);
}

转载请注明出处(谢谢)

关于模板引擎handlebars.js基本用法的更多相关文章

  1. JS模板引擎handlebars.js的简单使用

    handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...

  2. 前端模板引擎doT.js的用法

    简介 一款简单好用的前端模板引擎 用法 <script type="text/javascript" src="js/doT.min.js">< ...

  3. JS 模板引擎 Handlebars.js 中文说明

    Handlebars 为你提供了一个可以毫无挫折感的高效率书写 语义化的模板 所必需的一切. Mustache 模板和 Handlebars 是兼容的,所以你可以把Mustache模板拿来导入到Han ...

  4. 前端JS模板引擎Mustache.js的用法

    Mustache.js在前端是一个非常强大的模板 Mustache用法参考

  5. Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整

    Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...

  6. 模板引擎mustache.js

    Javascript模板引擎mustache.js详解   阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...

  7. js模版引擎handlebars.js实用教程

    js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...

  8. JavaScript模板引擎Template.js使用详解

    这篇文章主要为大家详细介绍了JavaScript模板引擎Template.js使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   template.js 一款 JavaScript 模板引 ...

  9. 探究Javascript模板引擎mustache.js使用方法

    这篇文章主要为大家介绍了Javascript模板引擎mustache.js使用方法,mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后 ...

随机推荐

  1. day_2安装Python解释器和pycharm

    首先我们复习一下昨天的内容 ···重点 1:进制转换:二进制 与 十六进制 1111  0101 1010 转换为 f5a 2:内存分布:堆区 和 栈区 计算机的原理: 控制器 运算器 存储器 inp ...

  2. RabbitMQ 常用操作

    RabbitMQ简介 1.首先安装erlang rpm -Uvh https://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos ...

  3. 剑指offer编程题Java实现——面试题9斐波那契数列

    题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...

  4. linux下编写C++程序播放音频

    参考: https://blog.csdn.net/zlyaxixuexi/article/details/79014441 格式转换: https://www.media.io/zh/

  5. 常用 Linux 命令使用说明

    Linux 如果不知道某个命令的意思,通过  "man 命令" 可以查看它的使用方式及详细信息. 操作tomcat用到的相关命令 1.Enter 执行命令 2.Tab 自动补全命令 ...

  6. C3P0连接池、DBCP连接池

    C3P0连接池: 配置文件:c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c ...

  7. C#6.0语言规范(四) 类型

    C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type : value_type | reference ...

  8. postgres Date/Time 学习笔记

    一.Date/Time Types 参考文档:https://www.postgresql.org/docs/9.2/static/datatype-datetime.html Types 别名 ti ...

  9. mac的safari浏览器调试ios手机网页

    iOS 6给Safari带来了远程的Web检查器工具. 一.参考链接 ios开发者文档 safari开发者工具 remote debugging safari 二.设置iphone 设置 -> ...

  10. Liferay7 BPM门户开发之20: 理解Asset Framework

    Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签. ...