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 相关文章推荐
Track Image Loading效果代码分析
Aug 13 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
js实现可得到不同颜色值的颜色选择器实例
Feb 28 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
java必学必会之static关键字
Dec 03 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
在vue项目中优雅的使用SVG的方法实例详解
Dec 03 Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
javascript实现文字跑马灯效果
Jun 18 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求最大子序列和的算法实现
2011/06/24 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python实现多进程的四种方式
2019/02/22 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
python中selenium库的基本使用详解
2020/07/31 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
心理健康心得体会
2014/01/02 职场文书
抄作业检讨书
2014/02/17 职场文书
医院节能减排方案
2014/06/13 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
投标承诺函格式
2015/01/21 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android