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/ ...
随机推荐
- opendir函数
#include<sys/types.h> #include<dirent.h> DIR *dirptr = NULL; struct dirent *entry; dirpt ...
- 使用vue给导航栏添加链接
如下面的导航栏,使用vue技术给该导航栏增加链接: js代码为: navigation:function(){ new Vue({ el: '#navUl', data: { menuData:{ ' ...
- openjudge 螺旋加密
/*======================================================================== 25:螺旋加密 总时间限制: 1000ms 内存限 ...
- Delphi、C C++、Visual Basic数据类型的对照 转
Delphi.C C++.Visual Basic数据类型的对照 变量类型 Delphi C/C++ Visual Basic 位有符号整数 ShortInt char -- 位无符号整数 Byte ...
- 【python】python定时器
#coding:utf-8 import os import time def print_ts(message): print "[%s] %s"%(time.strftime( ...
- jquery深拷贝和浅拷贝
var obj1 = { a: 1 };var obj2 = { b: {bbb: 2} };function Clone(){//浅拷贝 拷贝到obj1值会被改变 在一个栈中 $.extend(ob ...
- 代码安装apk文件
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri = Uri.fromFile(file); in ...
- WCF服务客户端首页调用慢的问题处理
场景: WCF服务架设于IIS服务中,走TCP协议.客户端首次调用特别慢,第一次加载完后,都正常. 解决: 把服务中需要序列化的模型所在的工程 > 属性 > 生成 > 生成序列化程序 ...
- asp.net解决高并发的方案.[转]
最近几天一直在读代震军的博客,他是Discuz!NT的设计者,读了他的一系列关于Discuz!NT的架构设计文章,大呼过瘾,特别是Discuz!NT在解决高访问高并发时所设计的一系列方案,本人尤其感兴 ...
- Socket Server-基于NIO的TCP服务器
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...