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 相关文章推荐
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
Jul 20 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 Javascript
AngularJS实现单一页面内设置跳转路由的方法
Jun 28 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
轻松理解vue的双向数据绑定问题
Oct 30 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
Sep 21 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
JS代码编译器Monaco使用方法
Jun 11 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使用sql数据库 获取字段问题介绍
2013/08/12 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
微信小程序云开发之云函数详解
2019/05/16 Javascript
JS实现轮播图效果
2020/01/11 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python字符串处理函数简明总结
2015/04/13 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
详解python tcp编程
2020/08/24 Python
.net笔试题
2014/03/03 面试题
电气个人求职信范文
2014/02/04 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
Flask搭建一个API服务器的步骤
2021/05/28 Python