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 相关文章推荐
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
浅谈 Vue v-model指令的实现原理
Jun 08 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
JavaScript 定时器详情
Nov 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最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
python端口扫描系统实现方法
2014/11/19 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python安装requests库的实例代码
2019/06/25 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
python实现tail -f 功能
2020/01/17 Python
Python 实现简单的客户端认证
2020/07/29 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
请解释在new与override的区别
2012/10/29 面试题
中专生职业生涯规划书范文
2014/01/10 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
学雷锋活动简报
2015/07/20 职场文书
车位出租协议书范本
2016/03/19 职场文书
求职信如何撰写?
2019/05/22 职场文书
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript