关于模板引擎handlebars.js基本用法
生活随笔
收集整理的這篇文章主要介紹了
关于模板引擎handlebars.js基本用法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
說明:模板引擎主要針對于渲染DOM,取代了字符串拼接,用下面的代碼親測handlebars模板引擎比字符串拼接渲染DOM慢了20ms,
這里配置一個(gè)在線DEMO,簡單說明下handlebars.js的基本用法,需要根據(jù)獲取的數(shù)據(jù)去渲染,就會用到循環(huán)、判斷
1、each,循環(huán)、可以嵌套
2、if,判斷、可以嵌套
3、hepler,對于復(fù)雜的邏輯判斷沒法起作用,自己注冊一個(gè)helper參與判斷
handlebars.js官網(wǎng)
在線DEMO移動端
詳細(xì)可以看上面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 重新排列數(shù)據(jù) 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;}}}// 創(chuàng)建DOM,渲染data createHTML(lists); } //1.3.01 注冊一個(gè)Handlebars Helper:addOne,用來將索引 1,因?yàn)槟J(rèn)是從0開始的 Handlebars.registerHelper("addOne",function(index,options){return parseInt(index) 1; });// 1.3.06 注冊helper:compare,用來比較判斷不同的顯示內(nèi)容 Handlebars.registerHelper("compare",function(temp,options){if(temp==1){//滿足條件執(zhí)行return '<i class="promotion"></i>';}else if(temp==0){//不滿足執(zhí)行{{else}}部分return '<i class="nothing"></i>';}else if(temp==-1){return '<i class="out"></i>';} });// 1.3 創(chuàng)建DOM函數(shù) 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="" />',// 根據(jù)live_id是否正在直播'{{#if live_id}}','<span></span>','{{/if}}','</div>',// 03 用戶名字'<span>','{{nickname}}','</span>',// 04 用戶積分'<b class="score">','{{score}}','</b>',// 05 用戶票數(shù)'<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 默認(rèn)把值為null去除了,即把為null的替換為:'',所以此時(shí)不能用!=null判斷了// if(liveid!=null){if(liveid){// 進(jìn)入直播間// h5toRoom(pfid,nickname,liveid,liveurl,livekey,direction);alert("進(jìn)入直播間");// 如果沒在直播,進(jìn)入個(gè)人主頁 }else{// h5toHomepage(pfid,nickname);alert("進(jìn)入個(gè)人主頁");}// console.log(this); });} }//3 getDom 獲取DOM function getDom(selector){return document.querySelectorAll(selector); }?轉(zhuǎn)載請注明出處(謝謝)
?
更多專業(yè)前端知識,請上 【猿2048】www.mk2048.com
總結(jié)
以上是生活随笔為你收集整理的关于模板引擎handlebars.js基本用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node实现简单的群体聊天工具
- 下一篇: 我所知道的前端组件化与模块化