otmpl 是一个轻量级前端模版(仅有39行无压缩代码,支持缓存),所用指令仅需[#...#]和{#...#},前者包含需要输出html语句,后者包含js变量。 支持javascript完整语法,你可以写for或者while或者其他任一javascript的语法。这个模板参考了YaYaTemplate,但我对其进行优化和改良,并缩短整体代码,提供更好的支持。

jQuery.tmpl = function (str, data, helper)
  • str:一个 jQuery 对象或字符串
  • data:json对象。
  • helper:扩展对象,例如下面示例中自定义一个方法。
  • 注意:str的内部采用 this.XXX 来访问 data,如:this.id == data.id。
缓存:
缓存只针对 jQuery.tmpl 方法,并且 str 参数必须是一个 jQuery 对象,利用 $.data 对渲染函数进行存储缓存。如以下代码执行两次“jQuery.tmpl($('#demo'),{id:1})”,只会分析一次,若传入的是“jQuery.tmpl($('#demo').html(),{id:1})”则会分析两次。
 
Template:
 
Scripts:
 
Result1:
 
Result2:
示例+源码:
 
复杂示例:
<script id="addtmp" type="text/html">
var item = {};
var value = {};
if(this.id)
{
item.title = " 编辑 [ " + this.id + " ]";
item.icon = "icon-create";
item.url = "@Url.Action("AddData")";
item.success = function(data){
$.msg.alert('新建成功!新的编号为:' + data.value + '。');
$('#dataGrid').datagrid('reload');
$('#dlg').dialog('close');
};
var data = $.api('@Url.Action("GetDataByID")' + '/' + this.id)
if(data){
if(data.value != null) value = data.value;
else{
$.msg.error('错误 '+data.code,data.message);
$('#dlg').dialog('close');
}
}
else{
$.msg.error('数据访问发生了错误!');
$('#dlg').dialog('close');
}
}
else
{
item.title = " 新建";
item.icon = "icon-modify";
item.url = "@Url.Action("ModifyData")";
item.success = function(data){
$.msg.alert(data ? '保存成功!' : '保存失败,数据可能不存在!');
$('#dataGrid').datagrid('reload');
$('#dlg').dialog('close');
};
}
[#
<div id="dlg" class="easyui-dialog" title="{#item.title#}" style="width: 400px; height: 210px; padding: 10px"
data-options="
iconCls: '{#item.icon#}',
modal:true
">
<div class="filterArea onepcssgrid">
<form class="api-form" data-options="
url:'{#item.url#}',
success:{#item.success#}">
<div>
<div class="onerow">
<div class="col2 text-right">Address</div>
<div class="col9">
<input type="hidden" name="id" value="{#value.id#}" />
<input type="text" name="address" style="width: 100%" value="{#value.address#}" />
</div>
</div>
<div class="onerow">
<div class="col2 text-right">City</div>
<div class="col9">
<input type="text" name="city" style="width: 100%" value="{#value.city#}" />
</div>
</div>
<div class="onerow">
<div class="col2 text-right">Start</div>
<div class="col9">
<input type="text" name="start" style="width: 100%" value="{#value.start#}" />
</div>
</div>
<div class="onerow">
<div class="col2 text-right">End</div>
<div class="col9">
<input type="text" name="end" style="width: 100%" value="{#value.end#}" />
</div>
</div>
</div>
<div style="padding: 5px; width: 100%; margin-top: 5px; text-align: center; height: 22px;">
<input class="btn orange" type="submit" value="{#item.title#}" />
<input class="btn white" type="reset" value="清空" />
</div>
</form>
</div>
</div>
#]
</script>

39行代码实现JS HTML模板(轻量+高效+易用)的更多相关文章

  1. 一个只有99行代码的JS流程框架(二)

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 导语 前面写 ...

  2. 圣思源Java视频36节练习源码分享(自己的190+行代码对比老师的39行代码)

    题目: * 随机生成50个数字(整数),每个数字范围是[10,50],统计每个数字出现的次数 * 以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来, * 如果某个数字出现次数为0, ...

  3. Vue.js:轻量高效的前端组件化方案

    转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...

  4. Day.js 是一个轻量的处理时间和日期的 JavaScript 库

    Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...

  5. 一个只有99行代码的JS流程框架

    张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 最近一直在想一个问题,如何能让js代码写起来更语义化和更具有可读性. 上周末的时候突发奇想,当代码在运 ...

  6. Vue.js:轻量高效的前端组件化方案(转载)

    摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue ...

  7. 【转】Vue.js:轻量高效的前端组件化方案

    摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue ...

  8. ES6躬行记(4)——模板字面量

    模板字面量(Template Literal)是一种能够嵌入表达式的格式化字符串,有别于普通字符串,它使用反引号(`)包裹字符序列,而不是双引号或单引号.模板字面量包含特定形式的占位符(${expre ...

  9. 轻量高效的开源JavaScript插件和库 【转】

    图片 布局 轮播图 弹出层 音频视频 编辑器 字符串 表单 存储 动画 时间 其它 加载器 构建工具 测试 包管理器 CDN 图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果 ...

随机推荐

  1. ubuntu 14.04 更新 gcc/g++ 4.9.2

    ubuntu 14.04 更新 gcc/g++ 4.9.2 最近看到c++11非常的好用,尤其是自带了regex,于是稍微学了一下c++11的新特性.可是我在编译一个regex程序是却发现稍微复杂一点 ...

  2. Java、Android 开发环境搭建

    一.准备工作 为便于管理,将java开发工具集中到一个文件夹中.创建D:\javaDevE文件夹,JDK.Android-SDK.Eclipse.tomcat等都可以安装到这个文件夹中. 二.搭建Ja ...

  3. kettle转换提高性能拆分转换步骤_20161201

    今天是12月1号,前期用kettle做了月报自动报表的转换和作业,今天运行时候发现一个报表的程序跑起来失败,心里很纳闷,上过月刚跑的没问题,怎么会无缘无故的失败. 通过看kettle运行日志,发现一个 ...

  4. 温习SQL server

    做了好几年的管理工作,技术上有些退步,现在又一一捡起来啦, 以下最近几天看到的好文章, SQL Server约束 http://blog.csdn.net/qq61394323/article/det ...

  5. ecshop的特点,持续加新

    一.目录文件结构 入口文件index.php,define('IN_ECS', true); 只有为true时才可以进入. 首先加入init.php,在这个文件里: @ini_set('memory_ ...

  6. ORACLE 10进制与16进制的互相转换

    1. 10---->16 使用to_char(10,'xxx')函数,如果位数长,多加几个 x 2. 16---->10 使用to_number(’a','xxx')函数,如果位数长,多加 ...

  7. html() 和 text() 方法的区别

    html()方法仅支持XHTML的文档,不能用于XML文档,而text()既支持HTML文档,也 支持XML文档. html():没有参数,用于获取html的值: html(val):有参数,用于设置 ...

  8. Asp.net Session 保存到MySql中

    一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...

  9. Selenium2+python自动化19-单选框和复选框(radiobox、checkbox)

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...

  10. Oracle SQL*plus常用的命令和函数

    常用命令: 连接sqlplus命令行下运行cmd进入,如以sys模式登陆,命令如下:(1).sqlplus "sys/zhb126 as sysdba" (2).sqlplus/n ...