javascript轻量级模板引擎juicer使用指南

2024-06-19 03:18

本文主要是介绍javascript轻量级模板引擎juicer使用指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Juicer 是一个高效、轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC)。

使用方法

编译模板并根据数据立即渲染出结果

?
1
juicer(tpl, data);

仅编译模板暂不渲染,返回一个可重用的编译后的函数

?
1
var compiled_tpl = juicer(tpl);

根据给定的数据对之前编译好的模板进行渲染

?
1
2
var complied_tpl = juicer(tpl);
var html = complied_tpl.render(data);

注册/注销自定义函数(对象)

?
1
2
juicer.register(‘function_name ', function);
juicer.unregister(‘function_name' );

默认参数配置

?
1
2
3
4
5
6
{
   cache: true [ false ];
   script: true [ false ];
   error handling: true [ false ];
   detection: true [ false ];
}

修改默认配置,逐条修改

?
1
juicer.set( 'cache' , false );

修改默认配置,批量修改

?
1
2
3
4
juicer.set({
      'script' : false ,
      'cache' : false
})

Juicer 默认会对编译后的模板进行缓存,从而避免同一模板多次数据渲染时候重复编译所耗的时间, 如无特殊需要,强烈不建议关闭默认参数中的 cache,这么做将会令 Juicer 缓存失效从而降低性能.

语法

* ${变量}         

- 使用${}输出变量,其中_ 为对数据源的引用(${_})。支持使用自定义函数。

?
1
2
3
${name}
${name| function }
${name| function , arg1, arg2}
?
1
2
3
4
5
6
7
8
9
10
11
12
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);

* 转义/避免转义

     - ${变量} 在输出之前会对其内容进行转义,如果你不想输出结果被转义,可以使用 $${变量} 来避免这种情况。

?
1
2
3
4
5
6
7
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}当前索引

?
1
2
3
4
{@each list as item, index}
     ${item.prop}
     ${index} //当前索引
{@/each}

*判断 {@if} ... {@else if} ... {@else} ... {@/if}

*注释 {# 注释内容}

 {# 这里是注释内容}
*辅助循环 {@each i in range(m, n)}

?
1
2
3
{@each i in range(5, 10)}
     ${i}; //输出 5;6;7;8;9;
{@/each}

*子模板嵌套 {@include tpl, data}

       - 子模板嵌套除了可以引入在数据中指定的子模板外,也可以通过指定字符串`#id`使用写在`script`标签中的模板代码.

       - HTML代码:

?
1
2
3
<script type= "text/juicer" id= "subTpl" >
    I'm sub content, ${name}
</script>

- Javascript 代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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 代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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轻量级模板引擎juicer使用指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073853

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H