最近開發(fā)前端一直用的前端模板引擎;
一直使用的 TPPL 模板引擎 源代碼如下:
function tppl(tpl, _data) { tpl = tpl.replace(/(<)/g, "<").replace(/(&)/g, "&").replace(/(>)/g, ">"); var data = _data || {}; if (typeof data !== "object") { console.log("TEFinal -> data is not JSON Object"); return null; } var fn = function(d) { var i, k = [], v = []; for (i in d) { k.push(i); v.push(d[i]); } return new Function(k, fn.$).apply(d, v); }; if ( !fn.$ ) { var tpls = tpl.split(""); fn.$ = "var $empty=""; var $reg = RegExp(/object|undefined|function/i); var $="""; for (var t in tpls) { var p = tpls[t].split(" "); if (t != 0) { fn.$ += "=" == p[0].charAt(0) ? "+($reg.test(typeof(" + p[0].substr(1) + "))?$empty:" + p[0].substr(1) + ")" : ";" + p[0].replace(/ /g, "") + "$=$"; } fn.$ += "+"" + p[p.length - 1].replace(/"/g, """).replace(/ /g, " ").replace(/ /g, " ").replace(/ /g, " ") + """; } fn.$ += ";return $;"; } return data ? fn(data) : fn; }
今天突發(fā)奇想,考慮到eval()中放入自執(zhí)行函數(shù),而這個閉包又可以直接訪問到外部變量,那么經(jīng)過整理,終極版的模板引擎出爐,代碼如下:
function evalTE (tpl, data) { tpl = tpl.replace(/^s+|s+$/gm, "").replace(/ /g, "").replace(/ /g, "") .replace(/ /g, "").replace(/(<)/g, "<").replace(/(&)/g, "&").replace(/(>)/g, ">"); var fn = "(function(){var $$ = """, evals = tpl.split(""); for (var t in evals) { var p = evals[t].split(" "); if (t != 0) { fn += "=" == p[0].charAt(0) ? "+" + p[0].substr(1) : ";" + p[0] + "$$=$$"; } fn += "+"" + p[p.length - 1] + """; } fn += ";return $$; })();"; return data ? eval(fn) : fn; }
通過eval()自執(zhí)行函數(shù),函數(shù)又可以訪問到外部的 data 數(shù)據(jù); 如果不傳需要渲染的數(shù)據(jù),那么可以返回該自執(zhí)行函數(shù)字符串。當(dāng)需要渲染的時候,可以通過eval()或者new Function()來調(diào)用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89958.html
摘要:寫在前面模板的誕生是為了將顯示與數(shù)據(jù)分離,模板技術(shù)多種多樣,但其本質(zhì)是將模板文件和數(shù)據(jù)通過模板引擎生成最終的代碼。目前有著很多這種模板引擎,諸如的,,的。當(dāng)然在用過這么多的模板引擎后,也有著自己實現(xiàn)一個簡易模板引擎的沖動。 寫在前面 模板的誕生是為了將顯示與數(shù)據(jù)分離,模板技術(shù)多種多樣,但其本質(zhì)是將模板文件和數(shù)據(jù)通過模板引擎生成最終的HTML代碼。目前有著很多這種模板引擎,諸如Node的...
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 1178·2021-09-10 10:51
閱讀 909·2019-08-30 15:53
閱讀 2735·2019-08-30 12:50
閱讀 986·2019-08-30 11:07
閱讀 1998·2019-08-30 10:50
閱讀 3607·2019-08-29 18:47
閱讀 1319·2019-08-29 18:44
閱讀 1607·2019-08-29 17:01