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中ajax学习笔记一
Oct 16 Javascript
js自动闭合html标签(自动补全html标记)
Oct 04 Javascript
JS获得浏览器版本和操作系统版本的例子
May 13 Javascript
scrollWidth,clientWidth,offsetWidth的区别
Jan 13 Javascript
javascript操作符&quot;!~&quot;详解
Feb 10 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
详解React中合并单元格的正确写法
Jan 08 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 IPV6正则表达式验证代码
2010/02/16 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
jquery form 加载数据示例
2014/04/21 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
js中document.write的那点事
2014/12/12 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
美国轮胎网站:Priority Tire
2018/11/28 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
部队学习十八大感言
2014/01/11 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
小学六年级毕业感言
2015/07/30 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python