artTemplate--模板使用自定义函数(2)
我的常用自定义函数
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>helper-demo</title>
<script src="../dist/template.js"></script>
<script src="../dist/jquery-1.11.3.js"></script>
</head>
<body>
<h1>辅助方法</h1>
<div id="content"></div>
<script id="test" type="text/html">
{{if hasEmptyProperties(testData)}}
查询成功,无该用户
{{else}}
查询该成功:xxx
{{/if}}
{{if isBlank(testData.queryHistory,'overtime')}}
是空的
{{else}}
不是空的
{{/if}}
{{if isBlank(testData.queryHistory)}}
是空的
{{else}}
不是空的
{{/if}}
{{if isEmptyProperty(testData.queryHistory,"time")}}
是空的
{{else}}
不是空的
{{/if}}
</script>
<script>
//递归需要用到的变量
var gExit = false;
var gIsExist = false;
var gIsValid = false;
function initGobalVariables(){
gExit = false;
gIsExist = false;
gIsValid = false;
}
/**
* 判断传入的json对象或者json对象指定的属性是否为空
* @param data json对象
* @param key 属性
* @return boolean
*/
template.helper("isBlank", function (data,key) {
debugger
var isBlank = false;
if(typeof (key) =="undefined"||key.length==0){
if (typeof (data) == "object") {
if ($.isEmptyObject(data)) {
isBlank= true;
}
} else if((typeof (data) =="undefined")){
isBlank = true;
}
}else{
if (typeof (data) == "object") {
if(typeof (data[key]) == "object"|| typeof (data[key]) == "undefined"){
if ($.isEmptyObject(data[key])) {
isBlank = true;
}
}
} else {
if((typeof (data) =="undefined")){
isBlank = true;
}
}
}
return isBlank;
});
/**
* 判断当前对象中指定属性是否为空(不推荐使用)
*
* <pre>
* 适用于几个属性判断或运算
*
* 如:{{testData.queryHistory.overtime==null || testData.queryHistory.name ==null}}
*
* 用法:
* {{if isEmptyProperties(testData.queryHistory,"['overtime','name']")}}
* 空的
* {else}}
* 是空的
* {/if}}
* </pre>
*
* @Param data
* 传入的js或者json对象 return {boolean}
*
*/
template.helper("isEmptyProperty", function(data, keys) {
var keys = [ keys ];
var flag = false;
if ($.isEmptyObject(data)) {
flag = true;
} else {
$.each(keys, function(i, key) {
if (flag == true) {
return false;
}
flag = isEmpty(data, key);
});
}
// 维护全局变量
initGobalVariables();
return flag;
});
/**
* 递归判断当前被指定的属性在当前对象中是否为空
*
* @param data
* Json对象
* @returns {boolean}
*/
function isEmpty(data, key) {
// 中止执行当前递归
if (gExit == true) {
return gIsExist;
}
if (typeof data == "object") {
if ($.isEmptyObject(data)) {
gIsExist = true;
gExit = true;// 满足条件,退出递归
} else {
$.each(data, function(k, v) {
// 当前属性为传入的指定属性时
if (k == key) {
if ($.isEmptyObject(data[k])) {
gIsExist = true;
gExit = true;// 满足条件,退出递归
} else {
gIsExist = false;
gExit = true;// 满足条件,退出递归
}
gIsValid = true;// 当前指定属性有效
return false;// 退出当前迭代
} else {
if ($.isEmptyObject(data[k])) {
return true;
}
gIsExist = isEmpty(v, key);
}
});
}
} else {
// jsonOb is a number or string or undefined
if((typeof (data) =="undefined")){
gIsExist = true;
gExit = true;// 满足条件,退出递归
}
}
if (!gIsValid) {
gIsExist = true;
}
return gIsExist;
}
/**
* 对指定Json对象遍历其属性判断是否存在空值,只要存在空属性就代表无效对象,返回false
*
* <pre>
* Json对象1: testData:{
* queryHistory:{
* array:[],
* query:{},
* name:'fdsafdsa'
* }
* Json对象2: testData:{
* queryHistory:{
* overtime:[],
* query:{time:'100'},
* name:'fdsafdsa'
* }
* Json对象3: testData:{
* queryHistory:{}
* }
* 在模板输入: {{if isValidObject(testData)}}
* 返回: true;
*
*
*
* </pre>
*
* @Param data
* 要进行校验的Json对象
* @Param args
* Json对象中的属性参数
* @author liangyh
*/
template.helper("hasEmptyProperties", function(data) {
var isInvalid = false;
isInvalid = isExistEmptyProperties(data);
// 维护全局变量
gExit = false;
gIsExist = false;
return isInvalid;
});
/**
* 递归判断当前对象是否存在空属性
*
* @param data
* Json对象
* @returns {boolean}
*/
function isExistEmptyProperties(data) {
// 中止执行当前递归
if (gExit == true) {
return gIsExist;
}
if (typeof data == "object") {
if ($.isEmptyObject(data)) {
gIsExist = true;
gExit = true;// 满足条件,退出递归
} else {
$.each(data, function(k, v) {
// k is either an array index or object key
gIsExist = isExistEmptyProperties(v);
});
}
} else{
if((typeof (data) =="undefined")){
gIsExist = true;
gExit = true;// 满足条件,退出递归
}
}
return gIsExist;
}
/**
* 对日期进行格式化,
*
* @param date
* 要格式化的日期
* @param format
* 进行格式化的模式字符串 支持的模式字母有: y:年, M:年中的月份(1-12), d:月份中的天(1-31),
* h:小时(0-23), m:分(0-59), s:秒(0-59), S:毫秒(0-999), q:季度(1-4)
* @return String
* @author yanis.wang
* @see http://yaniswang.com/frontend/2013/02/16/dateformat-performance/
*/
template.helper('dateFormat', function (date, format) {
if (typeof date === "string") {
var mts = date.match(/(\/Date\((\d+)\)\/)/);
if (mts && mts.length >= 3) {
date = parseInt(mts[2]);
}
}
date = new Date(date);
if (!date || date.toUTCString() == "Invalid Date") {
return "";
}
var map = {
"M": date.getMonth() + 1, // 月份
"d": date.getDate(), // 日
"h": date.getHours(), // 小时
"m": date.getMinutes(), // 分
"s": date.getSeconds(), // 秒
"q": Math.floor((date.getMonth() + 3) / 3), // 季度
"S": date.getMilliseconds()
// 毫秒
};
format = format.replace(/([yMdhmsqS])+/g, function (all, t) {
var v = map[t];
if (v !== undefined) {
if (all.length > 1) {
v = '0' + v;
v = v.substr(v.length - 2);
}
return v;
} else if (t === 'y') {
return (date.getFullYear() + '').substr(4 - all.length);
}
return all;
});
return format;
});
//数据
var data = {
time: 1408536771253,
testData: {
queryHistory: {
overtime: [],
query: {time: '100'},
name: 'fdsafdsa'
}
}
};
var html = template('test', data);//渲染模板
document.getElementById('content').innerHTML = html;
</script>
</body>
</html>
artTemplate--模板使用自定义函数(2)的更多相关文章
- 在ecshop模板使用自定义函数
https://blog.csdn.net/shaolinld/article/details/46400485 在ecshop模板使用自定义函数 可以增加自定义函数,在模板直接调用,例如: {$us ...
- 四、smarty模板的自定义函数
smarty模板的自定义函数(这里介绍的是常用) 分为三个种类: 1. 变量调节器 2. 函数 3. 块函数 三个种类插件的用法: 1. 变量调解器的用法, <{$var|myfun:a ...
- 模板语言 自定义函数simple_tag
模板语言自带的一些处理函数:通过管道符来处理 帮助方法:{{ item.event_start|date:"Y-m-d H:i:s"}} 转换成日期时间型{{ bio|trunc ...
- art-template自定义函数
自定义函数 // 百分比计算 template.defaults.imports.percentage = function (num1, num2) { var res; if(!num1 & ...
- Thinkphp模板怎么使用自定义函数
内置模板引擎支持对模板变量使用函数,并支持多个函数同时使用. 注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|fu ...
- Thinkphp模板中使用自定义函数的方法
注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...
- thinkphp模板中使用自定义函数
注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...
- 模板自定义函数 template function
sqlite3中的日期默认是UTC,当日期字段的默认值是CURRENT_TIMESTAMP时,这个日期和北京时间CST少了8小时. 网上建议说数据库里用UTC,读取数据时再转换为当地时间. web页面 ...
- django 笔记8 url模板 自定义函数 simple_tag
感谢alex老师~ 知识点: URL - 两个没见 url>路由系统> 函数或类 > 返回字符串 Form表单提交: 提交 >url>函数或类中的方法 -.. HttpR ...
- 五,Smarty模板技术/引擎——自定义函数机制
自建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用: 示例:使用smarty自定义函数的机制,编写一个函数myfun1,通 ...
随机推荐
- EnvironmentAware接口的作用
在SpringBoot中的应用 凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.pr ...
- TypeScript躬行记(8)——装饰器
装饰器(Decorator)可声明在类及其成员(例如属性.方法等)之上,为它们提供一种标注,用于分离复杂逻辑或附加额外逻辑,其语法形式为@expression.expression是一个会在运行时被调 ...
- 百度地图addEventListener“赋值”参数
实现点击百度地图上的覆盖物,然后获取覆盖上的属性,进而实现数据传送. var pointArray=new Array();//创建一个数组存储坐标 /*在地图上标点*/ function ShowA ...
- $Poj2376\ Poj3171\ Luogu4644\ Cleaning\ Shifts$ 数据结构优化$DP$
$Poj$ $AcWing$ $Luogu$ $ps:$洛谷题目与$Poj$略有不同,以下$Description$是$Poj$版.题目的不同之处在于洛谷中雇用奶牛的费用不相同,所以不可以 ...
- XRPC之接口双向调用
一般远程接口调用的服务都是基于客户端主动调用服务端,由服务端来提供相关的接口服务:在新版本的XRPC中引入了一个新的功能,即接口双向通讯,组件提供服务创建客户会话的接口代理并调用客户提供的接口服务.接 ...
- 手摸手。完成一个H5 抽奖功能
要完成一个这样的抽奖功能 构思 奖励物品是通过接口获取的(img) 奖励结果是通过接口获取的(id) 抽奖的动画需要由慢到快再到慢 抽奖转动时间不能太短 抽奖结束需要回调 业务代码和功能代码要分离 先 ...
- 「2018-11-05模拟赛」T5 传送机 解题报告
5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...
- (httpd、php)2
(一)再说编译安装httpd2.4 新特性: 1:MPM(多处理模块)支持运行为DSO(动态共享,动态加载模式)机制,以模块形式按需加载,支持动态加载 2:event MPM生产环境可用 3:支持异步 ...
- zTree 节点勾选取消勾选 选中取消选中
zTreeObj.cancelSelectedNode function 举例 取消当前所有被选中节点的选中状态 var treeObj = $.fn.zTree.getZTreeObj(" ...
- openjudge 7622 求排列的逆序数(归并)
7622:求排列的逆序数 总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她) ...