artTemplate--模板使用自定义函数(1)
案例
//数据
var data = {
<span style="white-space:pre"> </span>time: 1408536771253,
queryRecord:{
queryHistory:{
overdue:[],
query:{time:'100'},
name:'fdsafdsa'
}
}
};
我想在页面显示的效果有数据时如下:
查询结果:逾期日期为 N ,预期次数为 N 次,查询次数为 N 次, 名字为:xxx
没有数据时,显示如下:
查询结果:查询成功,无记录
使用目前现有artTemplate的简单语法,如下:
{{if queryHistory==null || queryHistory.length==0|| queryHistory.overdue==null || queryHistory.overdue.length.length==0||queryHistory.query==null || queryHistory.query.length==0||queryHistory.name ==null || queryHistory.name.length==0}}
查询结果:查询成功,无记录
{{else}}
查询结果为:逾期时间为{{queryHistory.ovedue.date}},逾期次数为{{queryHistory.ovedue.time}},查询次数为{{queryHistory.query.time}},名字为:{{queryHistory.name}}{{/if}}
因为我不确定接口返回的数据是否有空值,我期望的结果应该是queryHistory下只要有属性是空的,我就希望显示最后查询结果为:“查询成功,无记录”,这样如果我使用原生的语法,我不得不做大量的判断,去判断我需要的属性是否会有空值,不然调用的时候会有异常
解决方案
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>helper-demo</title>
<script src="../dist/template.js"></script>
<script src="../dist/jquery-2.1.4.js"></script>
</head>
<body>
<h1>辅助方法</h1>
<div id="content"></div>
<script id="test" type="text/html">
{{if hasEmptyProperties(testData)}}
查询成功,无该用户
{{else}}
查询该成功:xxx
{{/if}}
</script>
<script>
//递归需要用到的变量
var exit = false;
var isExist = false;
/**
*对指定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);
//维护全局变量
exit = false;
isExist = false;
return isInvalid;
});
function isExistEmptyProperties(data) {
//中止执行当前递归
if(exit==true){
return isExist;
}
if (typeof data == "object") {
if ($.isEmptyObject(data)) {
isExist = true;
exit=true;//满足条件,退出递归
} else {
$.each(data, function (k, v) {
// k is either an array index or object key
isExist=isExistEmptyProperties(v);
});
}
}
else {
// jsonOb is a number or string
if($.isEmptyObject(data)){
isExist=true;
exit=true;//满足条件,退出递归
}
}
return isExist;
}
//数据
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>
注意:上面方法之所以用到全局变量,是因为我需要跳出递归,如果不使用全局变量去控制,那么递归时会导致每一个递归都会去执行,最后结果会有问题,因次我用到了一个exist变量作为退出递归的标志
artTemplate--模板使用自定义函数(1)的更多相关文章
- 在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,通 ...
随机推荐
- python tkinter动态追加按钮等控件可能遇到的问题
小爬最近给同事制作一个小爬虫:具体要求: 1.每天自动定时触发: 2.模拟用户自动登陆: 3.自动爬取对应API接口数据: 4.对爬取结果进行逻辑判断,对符合条件的数据进行规则化列示: 5.列示的行项 ...
- 前端Tips#2 - 将 arguments 转换成Array的最佳实践
本文同步自 JSCON简时空 - 技术博客,点击阅读 视频讲解 文字讲解 1.先讲结论 有很多种方式将 arguments 转换成数组,那么哪一种方式是最优的? 为节约大伙儿的时间,这里先说一下结论: ...
- 初始Redis与简单使用
初始Redis: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...
- MyBatis原理-架构流程
一 .MyBatis原理架构图 Mybatis的功能架构分为三层: API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库.接口层一接收到调用请求就会调用数据处理层来完成具体 ...
- 1065 单身狗 (25分)C语言
单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数:随 ...
- 当Parallel遇上了DI - Spring并行数据聚合最佳实践
分析淘宝PDP 让我们先看个图, Taobao的PDP(Product Detail Page)页. 打开Chrome Network面板, 让我们来看taobao是怎么加载这个页面数据的. 根据经验 ...
- CSS的核心属性和浮动
1.CSS属性组成和作用 属性:属性值 1)每个css样式都必须由两部分组成:选择符(Selector)和声明(Decleration) 注:声明又包括属性(Properyt)和属性值(Value ...
- Linux中的零拷贝
零拷贝 本文图片和一些内容均来自后面的参考,非原创只是把文章中的一些关键内容整理一下,算作是一个学习笔记. 传统的I/O操作 传统的IO操作是用户应用程序只是需要调用两个系统调用 read() 和 w ...
- java高并发梳理
- [小技巧] Windows 命令行显示英文
在 Windows 里 " 运行" 使用 cmd 进行命令行, 如果是Windows 中文版的话,里面的命令输出是中文. 如果要显示英文的话,可以使用如下的命令: chcp 437 ...