工作中使用前端模板引擎,如 artTemplate、jsRender,来替代拼接字符串。

可是直接把模板写在页面上会带来页面臃肿,模板无法重用,与 ASP.NET等后端语言语法冲突等问题。

所以将多个模板集成到一个静态文件就很有必要,同时还能利用静态文件的缓存特性。

最好还能实现按需加载,不执行渲染的话就不载入模板文件。

虽然有对应的工具可以将模板转为 javascript 代码存在 .js 文件中,但是 js 下的模板代码可读性太差,不考虑。

于是根据以上需求写了一个jQuery 插件 $.loadTemplates

(function (window, $) {
var tplCache = {},
ENG_JSRENDER = 'jsRender',
ENG_ARTTEMPLATE = 'artTemplate',
//判定使用的是哪个模板引擎
//暂时支持jsRender 和 artTemplate
tplEngine = ($.views && $.views.jsviews) ? ENG_JSRENDER : window.template ? ENG_ARTTEMPLATE : '', Template = function (tplFile, templateTag) {
var loaded = false, callbacks = $.Callbacks(), _templates = {}; $.ajax(tplFile).done(function (data) {
var scripts = $(data).filter(templateTag || 'script'); scripts.each(function () {
var id = this.id;
if (!id) return;
//预编译并缓存编译后的模板
//编译的时候要给定 id ,这样才能支持子模板嵌套
switch (tplEngine) {
case ENG_JSRENDER:
{
_templates[id] = $.templates(id, this.innerHTML).render[id];
break;
}
case ENG_ARTTEMPLATE:
{
_templates[id] = template.compile(id, this.innerHTML);
break;
}
}
}); loaded = true; //触发在文件载入完成前挂上的渲染事件
callbacks.fire();
}); this.render = function (tplId, json, helper) {
var def = $.Deferred(),
_render = function () {
var html;
switch (tplEngine) {
case ENG_JSRENDER:
{
html = $.render[tplId](json, helper);
break;
}
case ENG_ARTTEMPLATE:
{
if (helper) template.helper(helper);
html = _templates[tplId](json);
break;
}
}
def.resolve(html);
}; loaded ? _render() : callbacks.add(_render); return def.promise();
}; tplCache[tplCache] = this;
}; $.extend({loadTemplates: function (tplFile, templateTag) { return tplCache[tplFile] || new Template(tplFile, templateTag);
}});
})(window, jQuery);

$.loadTemplates 源码

var tpl = $.loadTemplates('template.html');
var json = {str:'this is test'};
var templateId = 'temp1';
tpl.render(templateId, json)
.done(function(html){
$('body').html(html);
});

使用例子

存在的问题:

1. 由于使用了$.ajax 加载,所以模板文件的缓存在开发过程中可能会带来困扰。

2. 对于 'template.html' 和 './template.html' 无法识别为同一个静态文件。(前端 url 的同一性判断谁能给解下惑)

前端模板文件化jQuery插件 $.loadTemplates的更多相关文章

  1. ASP.NET Core 2.1以上 Bootstrap 4前端模板文件,开发环境与发布环境前端模板 environment的使用

    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了. ASp.Net Core 中,通常在 _Layout.csh ...

  2. 设计一种前端数据延迟加载的jQuery插件(2)

    背景 最近看到很多网站都运用到了一种前端数据延迟加载技术,包括淘宝,新浪网等等,这样做的目的可以使得一些未显示的图片随 着滚动条的滚动进行延迟显示. 好处显而易见,可以减少前端对于图片的Http请求, ...

  3. 后端渲染html、前端模板渲染html,jquery的html

    作者:赵魏璇链接:https://www.zhihu.com/question/28725977/answer/116177149来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

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

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

  5. 个人博客制作如何选择前端模板 thinkcmf后台加载新模板 CSS js文件

    我们的博客后台已经搭建好了,接下来我就要选择一个合适的模板做自己的博客,首先要定位你的博客是做什么用的,是属于什么行业,根据自己博客的定位选择适合的模板. 如果你是设计师,又会前端设计开发,那就可以自 ...

  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化

    把resource拷贝到test目录下 只保留文件夹结构和test1.ftl这个模板文件就可以了. 新建一个包 编写测试类 使用freemaker提供的方法生成静态文件 Configuration是i ...

  7. 上传数据、下载模板文件解决方案(前端:antd;后端:.Net Core WebAPI)

    一.Excel 模板下载 通过静态文件下载. 将模板文件放在根目录的 public 文件夹下备用. 下载事件方法如下:(通过临时生成一个 a 标签,触发后再移除) downLoadExcelModel ...

  8. 网站开发中很实用的 HTML5 & jQuery 插件

    这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...

  9. 前端模板artTemplate,handlerbars的使用心得

    写前端页面肯定离不开模板渲染,就近期项目中用的两个前端模板做一些使用总结,顺便复习一下,也方便后面温故. 1,artTemplate 优点: 1,一般web端用得较多,执行速度通常是 Mustache ...

随机推荐

  1. HTML---网页编程(2)

    前言 接着前面的HTML-网络编程1)来学习吧~~~ 色彩的表示 在计算机显示器中,使用红(red).绿(green).蓝(blue)3种颜色来构成各种各样的颜色.颜色的种类有16,256及65536 ...

  2. 选择排序(SelectSorted)

    //简单的选择排序public class SelectSorted { public static void main(String[] args) { int[] array={12,24,9,7 ...

  3. linux0.12 编译过程

    感谢这篇文章的作者:    http://www.cnblogs.com/strugglesometimes/p/4231359.html 编译是个很蛋疼的事情,本想把linux0.12在bochs上 ...

  4. [置顶] linux下让php支持mysql——寻找消失的mysql

       问题 最近我都在忙一个课件录制系统.这两天发现其中服务器端的一个更新数据库的php脚本运行有问题,一些本应该是系统自带函数却无法运行.于是我展开了调查... 服务器端是centos系统,其中ph ...

  5. db2 alter table 语法

    DB2 alter:add/delete/reset   column 1.添加字段 alter table [table_name] add [column_name] [column_type] ...

  6. 一些技术blog和安全blog

    1.安全blog: http://zenxds.com/blog/ http://navisec.it/ http://huaidan.org/ http://leapar.lofter.com/ h ...

  7. 应用层协议实现系列(一)——HTTPserver之仿nginx多进程和多路IO的实现

    近期在尝试自己写一个Httpserver,在粗略研究了nginx的代码之后,决定仿照nginx中的部分设计自己实现一个高并发的HTTPserver,在这里分享给大家. 眼下使用的较多的Httpserv ...

  8. android软键盘的用法总结

    1.软键盘的显示原理 软键盘其实是一个Dialog.InputMethodService为我们的输入法创建了一个Dialog,并且对某些参数进行了设置,使之能够在底部 或者全屏显示.当我们点击输入框时 ...

  9. Qt Creator 你必须要掌握的快捷操作

    多使用快捷键能显著提高工作效率,尽可能减少键盘,鼠标之间切换所浪费的时间.我这里列出个人认为非常重要必须掌握的 Qt Creator 快捷键.看你知道几个? . 1 .Ctrl(按住)+ Tab快速切 ...

  10. FastJson解析对象及对象数组--项目经验

    第一次使用json,解析工具为FastJson,使用语言为java 常见的json解析实例,以map为例: Map<String,String> map=new HashMap<St ...