js模版解析
function JzRender(tpl, data) {
// 模版解析 data是对象则返回字符串,是数组则返回字符串数组
if (data instanceof Array) {
var s = [];
for (var i = 0, j = data.length; i < j; i++) {
s.push(JzRender(tpl, $.extend({}, {}, data[i])));
}
return s;
}
return tpl.replace(/\$[A-Za-z0-9_\.\(\)]+\$/gi, function (matchs) {
var rs = matchs.replace(/\$/g, ""); // 找到匹配的字符串
var s = '';
var o = rs.indexOf(')');
if (-1 == o) { // 没有定义需要执行的函数 $argName$
if (-1 == rs.indexOf('.')) {
s = data[rs];
} else {
var aa = rs.split('.'); //只支持一级对象
s = data[aa[0]][aa[1]];
}
} else {
var k = rs.indexOf('(');
var ns = rs.substr(0, k);
var argName = rs.substr(k + 1, o - k - 1);
if (-1 == ns.indexOf('.')) { // 顶级函数 $Func(argName,data)$
s = typeof (window[ns]) == 'function' ? window[ns](data[argName], data) : data[argName];
} else {
var na = ns.split('.'); // 只支持一级对象 $Cls.Func(argName,data)$
s = typeof (window[na[0]][na[1]]) == 'function' ? window[na[0]][na[1]](data[argName], data) : data[argName];
}
}
return (s + "") == "undefined" ? "" : s;
});
}
function RenderJson(selector,json) {
// 应用json模版
var tpl = $(selector).html();
var s = [];
for (var o in json) {
if (Object.prototype.hasOwnProperty.call(json, o)) {
s.push(JzRender(tpl, json[o]));
}
}
$(selector).removeClass('hide').html(s.join(''));
s.length = 0;
}
js模版解析的更多相关文章
- 使用localstorage及js模版引擎 开发 m站设想
目前 m站开发的方式,依然请求完整的html,这样造成的问题就是每次请求的数据量过大过多,在没有wifi的情况下,导致页面打开的速度很慢,耗费的流量也较多:访问m站的多是移动端设备,其浏览器的版本都较 ...
- js模版引擎handlebars.js实用教程——为什么选择Handlebars.js
返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...
- js模版引擎handlebars.js实用教程——关于HTML编码
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- js 模版加载到前端
js 模版加载到前端 简单有效不高端 配个路由 /js/:filename , 用 readTemplate 响应请求,前端可以按模块方式直接 require 模板 'use strict' var ...
- JS的解析与执行过程
JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...
- js模版引擎handlebars.js实用教程——each-基本循环使用方法
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- js模版引擎handlebars.js实用教程——each-循环中使用this
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- js模版引擎handlebars.js实用教程——each嵌套
<!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...
- js模版引擎handlebars.js实用教程——循环中使用索引
<!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...
随机推荐
- 关于Ubuntu共享文件夹的设置
一.Xshell连接虚拟机(先关闭虚拟机的防火墙) sudo apt-get install openssh-serve sudo ufw disable sudo ufw allow 22 二.虚拟 ...
- 享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- 「LINUX资料」基础命令概览(一)
- Async/Await - Best Practices in Asynchronous Programming
https://msdn.microsoft.com/en-us/magazine/jj991977.aspx Figure 1 Summary of Asynchronous Programming ...
- Windows下利用虚拟机运行FSL 安装和配置
FSL是牛津大学FMRIB开发的用于分析功能磁共振影像的科研软件包. 运行要求:windows7或vista操作系统,10G硬盘空间,4G内存. 从FSL官网上下载Centos6的虚拟盘(FSLVm6 ...
- 基于CWMP(TR069)协议ACS服务器的搭建
Linux上安装openacs Openacs的安装分为四大步: 1.安装jdk 2.安装jboss 3.安装mysql 4.部署openacs JDK简介 Java DevelopmentKit(J ...
- Java-接口和抽象类区别
在类的设计中,需要明确一个原则,一个类不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果接口和抽象类都可以使用,那么优先使用接口,避免继承局限
- 关于C#循环图片GDI+内存不足异常的记录
循环大量图片的时候会报出GDI+内存不足的问题,这个问题困扰了我很久,下面是我的几个解决方案: 使用using(){}代码块来定义需要释放内存的变量.using代码块会在代码结束的时候释放变量,但是并 ...
- day24:面向对象设计与面向对象编程、类和对象
一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...
- 黄聪:日租VPS中FileZilla_Server配置方法
1.关闭VPS中IIS的FTP服务 2.FileZilla_Server 监听端口 21 3.FTP客户端端口为11311(看服务商给出的)