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 相关文章推荐
jQuery 使用手册(六)
Sep 23 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
从零开始学习搭建React脚手架项目
Aug 23 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 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
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
flask的orm框架SQLAlchemy查询实现解析
2019/12/12 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
会计与审计毕业生自荐信范文
2013/12/30 职场文书
黄河的主人教学反思
2014/02/07 职场文书
中药学专业求职信
2014/05/31 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
2014年人事部工作总结
2014/12/03 职场文书
医生个人年度总结
2015/02/28 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
优质护理心得体会
2016/01/22 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
python编程项目中线上问题排查与解决
2021/11/01 Python
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
Redis基本数据类型Set常用操作命令
2022/06/01 Redis