js模板引擎mustache介绍及实例

2024-05-09 09:32

本文主要是介绍js模板引擎mustache介绍及实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

亲测可用,若有疑问请私信

在Javascript中 mustache.js是实现mustache模板系统。

Mustache是一种没有逻辑的模板语法。它可以应用于HTML、配置文件、源代码等任何地方。 它通过使用散列或对象中提供的值在模板中展开标记来工作。

我们称它为没有逻辑的模板,是因为它没有if语句、else子句和for循环,它只有标签。一些标签被替换为值或什么也没有或者一系列的值

不能在模板中使用else if做逻辑判断,我们可以在数据传入之前对数据做逻辑操作

我们在那使用mustache.js

你可以在任何可以使用JavaScript的地方使用mustache.js来渲染mustache模板。包括web浏览器、服务器环境(node)。

语法

  • 模板以{{}}包裹住内容,格式中写入的是模板的内容。 被替换的内容字段使用双花括号包裹起来。
  • 插值表达式:双花括号{{}} 包裹替换的字段
  • {{#prop-name}}{{/prop-name}}用作for循环渲染,当prop-name的值为非空数组时,mustach不会遍历该数组,渲染出个数和该数组长度相等的DOM元素
  • 也可以用作if-else判断。{{#prop-name}}{{/prop-name}}和{{^prop-name}}{{/prop-name}}两组标签结合使用,当prop-name的值存在且不为false时,会渲染{{#prop-name}}{{/prop-name}}的内容,否则渲染{{^prop-name}}{{/prop-name}}的内容
 
  1. <script id="template" type="x-tmpl-mustache">

  2. {{name}}

  3. </script>

  4. <script type="text/javascript">

  5. var template = $("#template").html();

  6. //name值为函数返回值

  7. var r = Mustache.render(template,{

  8. name:function(){

  9. return 'abc' //abc会替换双花括号内name

  10. }

  11. })

  12. //name值为字符串

  13. var r = Mustache.render(template,{name:'wan'}) //字符串wan会替换双花括号内的name

  14. </script>

我们注意到上面代码render的第二个参数都是一个对象(变量和函数都是对象),第二个参数我们通常都会使用对象类型,传入一个对象,在模板中书写对象属性,可以渲染出对象的值。 但也可以是其它类型如 数组、字符串类型、数字,如下:

 
  1. <script id="template" type="x-tmpl-mustache">

  2. {{.}}

  3. </script>

  4. <script type="text/javascript">

  5. function loadUser(){

  6. var template = $("#template").html();

  7. var r = Mustache.render(template,'wan') //渲染出wan

  8. //或

  9. var r = Mustache.render(template,[1,d,3]) //渲染出1,d,3

  10. //或

  11. var r = Mustache.render(template,1) //渲染出1

  12. }

  13. </script>

我们可以看到如果第二个参数是其它类型,那么在模板中双花括号内就用点.来表示,使用起来不方便。 一般在项目中很少会传入其它类型。

对象属性值为数组时 实现forEach遍历数组渲染DOM

 
  1. //页面部分

  2. <div id="target">Loading</div>

  3. //模板

  4. <script id="template" type="x-tmpl-mustache">

  5. <ul>

  6. {{#list}}

  7. <li>

  8. <span>{{name}}</span>

  9. <span>{{age}}</span>

  10. <span>{{job}}</span>

  11. </li>

  12. {{/list}}

  13. </ul>

  14. </script>

  15. //js部分

  16. <script type="text/javascript">

  17. var template = $("#template").html();

  18. var r = Mustache.render(template,{

  19. list:[

  20. {name:'wannianqing',age:18,job:'The Front End'},

  21. {name:'wangxiaosan',age:19,job:'java'},

  22. {name:'lixiaosi',age:20,job:'The Front End'},

  23. {name:'sunxiaowu',age:21,job:'java'}

  24. ]

  25. })

  26. $("#target").html(r)

  27. </script>

用作if-else,属性无论是显示还是隐式转换为boolean类型,true时渲染{{#prop-name}} false时渲染{{^prop-name}}

 
  1. //页面部分

  2. <div id="target">Loading</div>

  3. //模板

  4. <script id="template" type="x-tmpl-mustache">

  5. {{#isShow}}一{{/isShow}}

  6. {{^isShow}}二{{/isShow}}

  7. </script>

  8. //js部分

  9. <script type="text/javascript">

  10. var template = $("#template").html();

  11. var r = Mustache.render(template,{isShow:true}); //isShow存在且为布尔值true时,显示 “一”

  12. var r = Mustache.render(template,{isShow:false}); //isShow存在且为布尔值true时,显示 “二”

  13. var r = Mustache.render(template,{}); //isShow不存在时,显示 “二”

  14. var r = Mustache.render(template,{isShow:[]}); //isShow存在,为空数组时,显示 “二”

  15. var r = Mustache.render(template,{isShow:undefined}); //isShow存在,为undefined时,显示 “二”

  16. var r = Mustache.render(template,{isShow:null}); //isShow存在,为null时,显示 “二”

  17. $("#target").html(r)

  18. </script>

实际使用

用一个唯一id的script标签包裹模板内容,type类型为text/template

<script id="template" type="text/template"></script>

使用原生javascript方法或者jquery方法获得唯一id的script标签的html内容

var template = document.getElementById('template').innerHTML.trim();
//或
var template = $("#template").html();

使用mustache的render方法处理模板后填充到目标位置

var rendered = Mustache.render(template,obj);
$('#target').html(rendered)

完整代码如下:

 
  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>Document</title>

  6. </head>

  7. <body "loadUser()">

  8. <div id="target">Loading</div>

  9. <script id="template" type="x-tmpl-mustache">

  10. Hello {{}}~

  11. <ul>

  12. {{#list}}

  13. <li>{{name}}</li>

  14. {{/list}}

  15. </ul>

  16. </script>

  17. <script type="text/javascript" src="js/jquery-2.1.0.min.js"></script>

  18. <script type="text/javascript" src="js/mustache.js"></script>

  19. <script type="text/javascript">

  20. function loadUser(){

  21. var template = $("#template").html();

  22. var obj = {

  23. list:[

  24. {name:'wan'},

  25. {name:'wan'},

  26. {name:'wan'}

  27. ]

  28. }

  29. var rendered = Mustache.render(template,obj);

  30. $('#target').html(rendered)

  31. }

  32. </script>

  33. </body>

  34. </html>

上面示例是内部文件使用mustache模板引擎,我们还可以引入外部模板引擎来渲染页面。

首先我们在HTML文档中引入jquery.mustache.js文件配合mustache使用,jquery.mustache.js是jQuery做了一层封装,提供了集中方法让我们更方便使用mustache做模板渲染。 此处我们使用它的.load方法从指定路径加载模板文件,加载成功后使用$.Mustache.render()处理模板渲染页面。

$.Mustache.load('./mustache/demo2.mustache').done(function(){$("#target").html($.Mustache.render('demo2',{name:'wan'}))})
下面我们来看一个完整的案例
 
  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>Document</title>

  6. </head>

  7. <body>

  8. <div id="target">Loading</div>

  9. <script type="text/javascript" src="js/jquery-2.1.0.min.js"></script>

  10. <script type="text/javascript" src="js/mustache.js"></script>

  11. <script type="text/javascript" src="js/jquery.mustache.js"></script>

  12. <script type="text/javascript">

  13. //要传入的数据

  14. var objData = {

  15. list:[

  16. {name:'wannianqing',age:18,job:'The Front End'},

  17. {name:'wangxiaosan',age:19,job:'java'},

  18. {name:'lixiaosi',age:20,job:'The Front End'},

  19. {name:'sunxiaowu',age:21,job:'java'}

  20. ]

  21. }

  22. //加载模板方法

  23. function loadTemplateMustache(mustacheName,targetId,templateId,data){

  24. //模板路径

  25. var mustacheDir = './mustache/'+mustacheName+'.mustache';

  26. //渲染目标容器

  27. var targetContainer = $(targetId);

  28. if(targetContainer.length > 0){

  29. $.Mustache

  30. .load(mustacheDir) //加载模板文件

  31. .done(function(){

  32. //渲染模板

  33. renderTarget(targetContainer,templateId,data)

  34. })

  35. }

  36. }

  37. //渲染模板方法

  38. function renderTarget(dom,templateId,data){

  39. var el = dom;

  40. el.html('');

  41. el.append($.Mustache.render(templateId,data));

  42. }

  43. loadTemplateMustache('demo4','#target','template',objData)

  44. </script>

  45. </body>

  46. </html>

这篇关于js模板引擎mustache介绍及实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Apache Ambari介绍

介绍 Apache Ambari项目旨在通过开发用于配置,管理和监控Apache Hadoop集群的软件来简化Hadoop管理。Ambari提供了一个直观,易用的Hadoop管理Web UI,由其RESTful API支持。 Ambari使系统管理员能够: 提供Hadoop集群 Ambari提供了跨任意数量的主机安装Hadoop服务的分步向导。Ambari处理群集的Hadoop服务配置。

Java File中renameTo的介绍和使用说明

看到项目中有个地方用的File的renameTo这个方法,本以为这个方法就是用来文件重命名的,但是项目中确用它来进行文件的移动。就是使用renameTo将一个文件从一个目录移动另一个目录下! 下面就简单介绍一下renameTo,并整理一个renameTo的使用! renameTo的介绍 官方文档说明 /*** 重新命名此抽象路径名表示的文件。此方法行为的许多方面都是与平台有关的:重命名操作

【一】并发编程故事背景介绍

背景 每一个故事都有一个开始,那么并发编程的故事的开始是什么呢? 由于人类的科学技术的发展,需要处理的任务越来越复杂也多样化,导致之前单核的处理器无法处理这些复杂的任务,于是处理器从之前的单核处理器逐渐发展到多核处理器【其实这里也有一个摩尔定律】。 多核处理器很好的解决了多任务和任务复杂度的问题,那么我们就应该学习一下多任务处理,这里指的是多线程,Java语言在创建时就支持多线程,很高明!在

十九、原型模式—通过复制生产实例 #和设计模式一起旅行#

拔一根猴毛,变出十万个孙悟空 故事背景 在java中,我们一般创建实例的时候可以使用了new 关键词指定类名来生成类的实例。例如: Preson p = new Person();或者Person p = Person.getInstance(); 但是是在实际开发过程中,有时候会有“不指定类名的前提下生成实例”的需求。这种情况下,就不能通过上面的这种方式生成实例! 除了上面

图文教程,Nginx+Keepalived(双机热备)介绍已经搭建高可用负载均衡环境

上一次分享了Nginx相关的应用场景如下: ​Nginx介绍以及一些应用场景说明 在实际使用,单机版的Nginx就不能满足高可用的要求了,在这种情况下,我们使用Nginx+Keepalived(双机热备)搭建一套高可用的环境,这就是本文的核心内容。 首先我们先了解一下Keepalived是个什么东东? Keepalived介绍 Keepalived是一个类似于layer3, 4 & 5交

mybaits中configuration标签介绍-------mybatis(三)

常用标签介绍 <properties resource="source/mybatis.properties"></properties> properties标签作用为引入外部的配置文件,从而将数据的连接信息分离出去 <settings> settting 标签中有很多属性,最常用的就是驼峰属性name=“mapUnderscoreToCamelCase”,默认false, 一般我们在写j

第一篇 安卓系统的介绍及特点

安卓系统介绍及特点 一、    安卓系统的介绍 1、 Andriod是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。早期由原名为“Android”公司开发,谷歌在2005年收购了该公司后,继续对Android系统开发运营,它采用了软件堆层的架构,主要分为三部分,底层Linux内核只提供基本的功能,其他的应用软件则由各公司自行开发,部分程序以Java

Springboot项目多个实例

点击Edit Configurations,Single instance only 打钩即可

Vue.js之Socket.IO 使用

一.前言 在很多需求业务中,都需要浏览器和服务器实时通信来实现功能,比如:扫码登录(扫码后,手机确认登录,PC网页完成登录并跳转)、订单语言提醒等,这些都是建立在两端实时通信的基础上的。对前端而言,来实现浏览器和服务器实时通信,最好的选择就是Socket.IO库,能够快速的实现两端实时通信功能。 1、什么是 Socket.IO? Socket.IO是一个WebSocket库,可以在浏览器和服

html 复制标签内文本的按钮的 js 实现【学习过程】【浏览器兼容】

想要实现div中的文字内容一键复制到剪切板中,一开始在网上search到两种方案: 方案1: <script type="text/javascript"> function jsCopy(s){ var obj=document.getElementById(s);obj.select(); //选择对象 document.execCommand("Copy"); //执行浏览器复制命令al