工作中使用前端模板引擎,如 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. MVC项目初次发布到IIS可能会遇到的问题

    MVC4 + .NET Framework 4.5 +Windows Server 2008+ IIS7.5 + 4.0集成模式池 ,初次发布后可能会遇到404.0 或者403.14错误,加入以下代码 ...

  2. hdoj 2899 Strange fuction【二分求解方程】

    Strange fuction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. appium api

    AppiumDriver getAppStrings()      默认系统语言对应的Strings.xml文件内的数据.iOS driver.getAppStrings(Stringlanguage ...

  4. MySql The service could not be started

    MySql安装 由于需要用mySql数据库今天就把它安上了,每次安装软件,数据库总是够我们折腾的,有时出现错误甚至比重装系统还要让人头疼. 今天在安的过程中就不出了很多错误,在重启与重装的反复捣鼓中终 ...

  5. timestamp ---自动更新修改时间 与 记录首次插入时间

    自动更新修改时间: mysql> create table z(a int ,b timestamp on update current_timestamp); mysql> insert ...

  6. 常用Content-type汇总

    Content-Type,内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式.什么编码读取这个文件.这里汇总一下常用的,所有资料来源于网络,未经测试:  文件后缀 处理方式  .* ...

  7. ios-点击屏幕,隐藏键盘

    ios-点击屏幕,隐藏键盘 - (void)getFirstRegist{ //结束键盘编辑 __weak typeof(self)weakSelf = self; UITapGestureRecog ...

  8. Java实现文件拷贝的4种方法.

    原文地址:http://blog.csdn.net/ta8210/article/details/2073817 使用 java 进行文件拷贝 相信很多人都会用,,不过效率上是否最好呢? 最近看了看N ...

  9. Dreamweaver cs6安装破解

    Dreamweaver 是前端开发的必备软件.目前最新版本为CS6,与CS5相比多了对HTML5.CSS3.jquery的关联支持,可以更方便的在Dreamweaver中编写前端代码. 安装准备: 1 ...

  10. 读取xml字符串

    string strXml = @"<MessageData><pm_id>10</pm_id><pm_title>这是公司或者产品的名称&l ...