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实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
js编写贪吃蛇的小游戏
Aug 24 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
Jan 04 Javascript
理解javascript中的严格模式
Feb 01 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
jQuery EasyUI 页面加载等待及页面等待层
Feb 06 Javascript
angularjs 缓存的使用详解
Mar 19 Javascript
vue store之状态管理模式的详细介绍
Jun 13 Javascript
详解node登录接口之密码错误限制次数(含代码)
Oct 25 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
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python中如何进行连乘计算
2020/05/28 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
护士检查书
2014/01/17 职场文书
职位说明书范文
2014/05/07 职场文书
营销与策划专业求职信
2014/06/20 职场文书
债务纠纷委托书
2014/08/30 职场文书
名人传读书笔记
2015/06/26 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android