我一直在使用一个小工具,并发现它在构建javascript应用过程中非常实用。它是一个非常简单的模板函数,速度快,支持缓存,并容易使用。我想分享一下使用它的过程中的一些技巧。
以下是模板函数的代码(你可以从正要出版的Secrets of the JavaScript Ninja一书中得到更精炼的版本):
// 简单JavaScript模板引擎
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
var cache = {};
this.tmpl = function tmpl(str, data){
// 判断我们是否已经有这么一个模板,或者我们需要载入模板
// 并保证把结果保存到缓存中。
var fn = !/W/.test(str) ?
cache[str] = cache[str] ||
tmpl(document.getElementById(str).innerHTML) :
// 生成一个可重用的函数,用于提供模板生成功能
// (它会被记录到缓存内).
new Function("obj",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
// 通过with(){}把数据作为本地变量引入
"with(obj){p.push('" +
// 把模板转换未纯javascript代码
str
.replace(/[
]/g, " ")
.split("<%").join(" ")
.replace(/((^|%>)[^ ]*)'/g, "$1
")
.replace(/ =(.*?)%>/g, "',$1,'")
.split(" ").join("');")
.split("%>").join("p.push('")
.split("
").join("\'")
+ "');}return p.join('');");
// 给用户提供一些基本的柯里化功能
return data ? fn( data ) : fn;
};
})();
你的模板代码看起来将是类似于(这并不是规定的格式,但是我比较喜欢这样):
<script type="text/html" id="item_tmpl">
<div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
<div class="grid_1 alpha right">
@@##@@"/>
</div>
<div class="grid_6 omega contents">
<p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/xiazai/code/10497">
<img src="https://img.php.cn/upload/webcode/000/000/019/176240880217401.jpg" alt="医院网站系统">
</a>
<div class="aritcle_card_info">
<a href="/xiazai/code/10497">医院网站系统</a>
<p>HTML医院网站系统基于PHP+MYSQL开发,在文章内容网站的基础上,预设了医院概况、新闻动态、环境设备、名医荟萃、专科介绍、就医指南、专家门诊值班表、网上挂号、医疗保健知识、在线咨询等医院网站常用的栏目和测试数据,采用适合医院网站的专用模版,增强了系统的针对性和易用性。系统具有文章、图文、下载、社区、表单、用户等基本系统模块和一系列网站辅助功能,用户也可根据自身特点任意创建和修改栏目,适合创建</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="医院网站系统">
<span>0</span>
</div>
</div>
<a href="/xiazai/code/10497" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="医院网站系统">
</a>
</div>
</div>
</div>
</script>
你也可以内嵌脚本:
<script type="text/html" id="user_tmpl">
<% for ( var i = 0; i < users.length; i++ ) { %>
<li><a href="<%=users[i].url%>"><%=users[i].name%></a></li>
<% } %>
</script>
提示:把脚本内嵌到你的页面中,并且content-type是未知的(例如在这个例子中,浏览器不知道该如何执行 text/html 脚本),那么浏览器会把它忽略掉 - 同时搜索引擎和屏幕读取也会忽略掉它。这是一个非常好的伪装代码,可以把你的模板嵌入到你的页面中。我喜欢使用快速却又随性的技术,我只需一到两个小模板,就可以得到又轻型和快速应用。
你可以在脚本中,像这样去使用:
var results = document.getElementById("results");
results.innerHTML = tmpl("item_tmpl", dataObject);
你可以预编译结果,在稍后使用。如果你只使用一个ID作为参数(或者一个模板代码)来调用模板函数,那么它就会返回一个预编译的函数,你就可以在稍后调用:
var show_user = tmpl("item_tmpl"), html = "";
for ( var i = 0; i < users.length; i++ ) {
html += show_user( users[i] );
}
这是目前最没办法的办法,解析和转换代码——对这你很可能无爱。不过他只有我中意的一项技术:在字符串中用字符静态搜索和静态替换时,比如split("match").join("replace"),执行速度更好——看起来不直观但可以有效工作在现代浏览器里(下一版FireFox会大幅提高replace(/match/g,"replace")的性能——所以现在这样的长表达式以后不需要的)
放轻松享受它——我很好奇代码中的突变。即使它很简单,仍然有很多事情可以用它做。
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号