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 相关文章推荐
深入理解JavaScript系列(4) 立即调用的函数表达式
Jan 15 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
Oct 06 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
node.js中debug模块的简单介绍与使用
Apr 25 Javascript
详解搭建es6+devServer简单开发环境
Sep 25 Javascript
实例分析编写vue组件方法
Feb 12 Javascript
vue-router 路由传参用法实例分析
Mar 06 Javascript
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如何透过ODBC来存取数据库
2006/10/09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
最实用的JS数组函数整理
2017/12/05 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python递归函数定义与用法示例
2017/06/02 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Numpy之reshape()使用详解
2019/12/26 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
小学门卫岗位职责
2013/12/17 职场文书
组织关系转移介绍信
2014/01/16 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
优秀党员申报材料
2014/12/18 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python