前端模板文件化jQuery插件 $.loadTemplates
工作中使用前端模板引擎,如 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的更多相关文章
- ASP.NET Core 2.1以上 Bootstrap 4前端模板文件,开发环境与发布环境前端模板 environment的使用
笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了. ASp.Net Core 中,通常在 _Layout.csh ...
- 设计一种前端数据延迟加载的jQuery插件(2)
背景 最近看到很多网站都运用到了一种前端数据延迟加载技术,包括淘宝,新浪网等等,这样做的目的可以使得一些未显示的图片随 着滚动条的滚动进行延迟显示. 好处显而易见,可以减少前端对于图片的Http请求, ...
- 后端渲染html、前端模板渲染html,jquery的html
作者:赵魏璇链接:https://www.zhihu.com/question/28725977/answer/116177149来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
- 个人博客制作如何选择前端模板 thinkcmf后台加载新模板 CSS js文件
我们的博客后台已经搭建好了,接下来我就要选择一个合适的模板做自己的博客,首先要定位你的博客是做什么用的,是属于什么行业,根据自己博客的定位选择适合的模板. 如果你是设计师,又会前端设计开发,那就可以自 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化
把resource拷贝到test目录下 只保留文件夹结构和test1.ftl这个模板文件就可以了. 新建一个包 编写测试类 使用freemaker提供的方法生成静态文件 Configuration是i ...
- 上传数据、下载模板文件解决方案(前端:antd;后端:.Net Core WebAPI)
一.Excel 模板下载 通过静态文件下载. 将模板文件放在根目录的 public 文件夹下备用. 下载事件方法如下:(通过临时生成一个 a 标签,触发后再移除) downLoadExcelModel ...
- 网站开发中很实用的 HTML5 & jQuery 插件
这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...
- 前端模板artTemplate,handlerbars的使用心得
写前端页面肯定离不开模板渲染,就近期项目中用的两个前端模板做一些使用总结,顺便复习一下,也方便后面温故. 1,artTemplate 优点: 1,一般web端用得较多,执行速度通常是 Mustache ...
随机推荐
- P1082丛林探险
P1082丛林探险 描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险. ...
- Eclipse中svn图标不显示
在菜单栏中:windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项,最后应用确认之后 ...
- CentOS添加swap分区
在多个VPS上尝试. 1.进入目录 cd /var/ 2.获取要增加的SWAP文件块(这里以1GB为例) dd if=/dev/zero of=swapfile bs=1024 count=10383 ...
- [CSS]利用伪元素实现一些特殊图形
给定的html代码是: <div class='square'></div> 平常实现我们常是通过添加小的icon来实现,不仅需要添加图片资源,还需要改动html结构. CSS ...
- 得到创建人Id
等到创建人id,也就是登录人id arg1 .getCtx().fetchMemberId(); 其中arg1是 LServerEnv 的对象
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- Scrapy的shell命令(转)
scrapy python MrZONT 2015年08月29日发布 ...
- VS2012的安装项目只能用InstallShield Limited Edition[附资源下载]
以前版本的Visual Stuido中安装项目都可以使用微软自家的Visual Studio Installer,但是到了VS2012这一切都变了,只能用InstallShield Limited E ...
- docker 查看容器详细
http://www.docker.org.cn/book/docker/checking-running-image-12.html
- LINUX 性能 测试 优化工具
监控 测试 优化