javascript轻量级模板引擎juicer使用指南


Posted in Javascript onJune 22, 2014

使用方法

编译模板并根据数据立即渲染出结果

juicer(tpl, data);

仅编译模板暂不渲染,返回一个可重用的编译后的函数

var compiled_tpl = juicer(tpl);

根据给定的数据对之前编译好的模板进行渲染

var complied_tpl = juicer(tpl);
 var html = complied_tpl.render(data);

注册/注销自定义函数(对象)

juicer.register(‘function_name', function);
juicer.unregister(‘function_name');

默认参数配置

{
   cache: true [false];
   script: true [false];
   error handling: true [false];
   detection: true [false];
 }

修改默认配置,逐条修改

juicer.set('cache', false);

修改默认配置,批量修改

juicer.set({
      'script': false,
      'cache': false
 })

Juicer 默认会对编译后的模板进行缓存,从而避免同一模板多次数据渲染时候重复编译所耗的时间, 如无特殊需要,强烈不建议关闭默认参数中的 cache,这么做将会令 Juicer 缓存失效从而降低性能.

语法

* ${变量}         

- 使用${}输出变量,其中_ 为对数据源的引用(${_})。支持使用自定义函数。

${name}
${name|function}
${name|function, arg1, arg2}
var = links: [{href: 'http://juicer.name', alt: 'Juicer'},
            {href: 'http://benben.cc', alt: 'Benben'},
            {href: 'http://ued.taobao.com', alt: 'Taobao UED'}  
           ]};
 var tpl = [ '{@each links as item}',
         '${item|links_build} <br />',  
         '{@/each}'].join('');
 var links = function(data) {    
 return '<a href="' + data.href + '" alt="' + data.alt + '" />';
};
juicer.register('links_build', links); //注册自定义函数
juicer(tpl, json);

* 转义/避免转义

     - ${变量} 在输出之前会对其内容进行转义,如果你不想输出结果被转义,可以使用 $${变量} 来避免这种情况。

var json = {
    value: '<strong>juicer</strong>'
 };
 var escape_tpl='${value}';
 var unescape_tpl='$${value}';
 juicer(escape_tpl, json); //输出 '<strong>juicer</strong>'
 juicer(unescape_tpl, json); //输出 '<strong>juicer</strong>'

*循环遍历 {@each} ... {@/each}          

     - 遍历数组,${index}当前索引

{@each list as item, index}
     ${item.prop}
     ${index} //当前索引
 {@/each}

*判断 {@if} ... {@else if} ... {@else} ... {@/if}

*注释 {# 注释内容}

 {# 这里是注释内容}
*辅助循环 {@each i in range(m, n)}

{@each i in range(5, 10)}
     ${i}; //输出 5;6;7;8;9;
 {@/each}

*子模板嵌套 {@include tpl, data}

       - 子模板嵌套除了可以引入在数据中指定的子模板外,也可以通过指定字符串`#id`使用写在`script`标签中的模板代码.

       - HTML代码:

<script type="text/juicer" id="subTpl">
   I'm sub content, ${name}
</script>

- Javascript 代码:

var tpl = 'Hi, {@include "#subTpl", subData}, End.';

juicer(tpl, {
subData: {
name: 'juicer'
}
});

//输出 Hi, I'm sub content, juicer, End.
 //或者通过数据引入子模板,下述代码也将会有相同的渲染结果:
 
 var tpl = 'Hi, {@include subTpl, subData}, End.';
 
 juicer(tpl, {
     subTpl: "I'm sub content, ${name}",
     subData: {
        name: 'juicer'
     }
 });

一个完整的例子

HTML 代码:

<script id="tpl" type="text/template">
   <ul>
     {@each list as it,index}
       <li>${it.name} (index: ${index})</li>
     {@/each}
     {@each blah as it}
       <li>
         num: ${it.num} <br />
         {@if it.num==3}
           {@each it.inner as it2}
             ${it2.time} <br />
           {@/each}
         {@/if}
       </li>
     {@/each}
   </ul>
 </script>

Javascript 代码:

var data = {
   list: [
     {name:' guokai', show: true},
     {name:' benben', show: false},
     {name:' dierbaby', show: true}
   ],
   blah: [
     {num: 1},
     {num: 2},
     {num: 3, inner:[
       {'time': '15:00'},
       {'time': '16:00'},
       {'time': '17:00'},
       {'time': '18:00'}
     ]},
     {num: 4}
   ]
 };
 
 var tpl = document.getElementById('tpl').innerHTML;
 var html = juicer(tpl, data);
Javascript 相关文章推荐
JS是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
Mar 13 Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 Javascript
vue select二级联动第二级默认选中第一个option值的实例
Jan 10 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
微信小程序实现音乐播放页面布局
Dec 11 Javascript
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
JQuery插件iScroll实现下拉刷新,滚动翻页特效
Jun 22 #Javascript
Window.Open如何在同一个标签页打开
Jun 20 #Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 #Javascript
Js实现手机发送验证码时按钮延迟操作
Jun 20 #Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 #Javascript
js处理php输出时间戳对不上号的解决方法
Jun 20 #Javascript
Javascript 实现复制(Copy)动作方法大全
Jun 20 #Javascript
You might like
MySql中正则表达式的使用方法描述
2008/07/30 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php输入流php://input使用浅析
2014/09/02 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
使用python Django做网页
2013/11/04 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
高中校园广播稿
2014/01/11 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
自强之星事迹材料
2014/05/12 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
授权委托书(完整版)
2014/09/10 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
linux目录管理方法介绍
2022/06/01 Servers
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android