博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web模板引擎—Mustache
阅读量:5768 次
发布时间:2019-06-18

本文共 2464 字,大约阅读时间需要 8 分钟。

Web模板引擎——Mustache

Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档。当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hogan 、ASP 下的 aspTemplate、以及 PHP 下的 Smarty,这里主要介绍基于 Javascript 语言的模板引擎,目前流行有 Mustache、Hogan、doT.js、JsRender、Kendo UI Templates等, 上可以看到它们的性能对比,首先先介绍下 。

一、简介:

Mustache 是一个 logic-less (轻逻辑)模板解析引擎,它的优势在于可以应用在 Javascript、PHP、Python、Perl 等多种编程语言中。

二、语法:

Mustache 的模板语法很简单,就那么几个:

  • {
    {keyName}}
  • {
    {#keyName}} {
    {/keyName}}
  • {
    {^keyName}} {
    {/keyName}}
  • {
    {.}}
  • {
    {<partials}}
  • {
    {
    {keyName}}}
  • {
    {!comments}}

这里将以 javascript 应用为例进行介绍,先来看个 Demo:

......
//运行后 Console 输出:

Hello Apple

在 Demo 中可以看到 data 是数据,tpl 是定义的模板,Mustache.render(tpl, data)方法是用于渲染输出最终的 HTML 代码。

借助 Demo 来对语法做简单的介绍:

  • {
    {keyName}}

{

{}}就是 Mustache 的标示符,花括号里的 keyName 表示键名,这句的作用是直接输出与键名匹配的键值,例如:

var tpl = '{
{company}}';var html = Mustache.render(tpl, data);//输出:Apple
  • {
    {#keyName}} {
    {/keyName}}

#开始、以/结束表示区块,它会根据当前上下文中的键值来对区块进行一次或多次渲染,例如改写下 Demo 中的 tpl:

var tpl = '{
{#address}}

{

{street}},{
{city}},{
{state}}

{
{/address}}';var html = Mustache.render(tpl, data);//输出:

1 Infinite Loop Cupertino</br>,California,CA

注意:如果{

{#keyName}} {
{/keyName}}
中的 keyName 值为 null, undefined, false;则不渲染输出任何内容。

补充:

1.获得"address"中的"note"中的"a",采用层层级进的方式:

{

{#address}}{
{#note}}{
{a}}{
{/note}}{
{/address};

2.如果某个属性是多个对象的数组,就属于多次渲染。

例:

var data={

  "type":[{对象1},{对象2}....]

}

Mustache.render(i,data);

  • {
    {^keyName}} {
    {/keyName}}

该语法与{

{#keyName}} {
{/keyName}}
类似,不同在于它是当 keyName 值为 null, undefined, false 时才渲染输出该区块内容。

var tpl = {
{^nothing}}没找到 nothing 键名就会渲染这段{
{/nothing}};var html = Mustache.render(tpl, data);//输出:没找到 nothing 键名就会渲染这段
  • {
    {.}}

{

{.}}表示枚举,可以循环输出整个数组,例如:

var tpl = '{
{#product}}

{

{.}}

{
{/product}}';var html = Mustache.render(tpl, data);//输出:

Macbook

iPhone

iPod

iPad

  • {
    {>partials}}

>开始表示子模块,如{

{> address}};当结构比较复杂时,我们可以使用该语法将复杂的结构拆分成几个小的子模块,例如:

var tpl = "

{
{company}}

    {
    {>address}}
"var partials = {address: "{
{#address}}
  • {
    {street}}
  • {
    {city}}
  • {
    {state}}
  • {
    {zip}}
  • {
    {/address}}"}var html = Mustache.render(tpl, data, partials);//输出:

    Apple

    • 1 Infinite Loop Cupertino</br>
    • California
    • CA
    • 95014
    • {
      {
      {keyName}}}

    {

    {keyName}}输出会将等特殊字符转译,如果想保持内容原样输出可以使用{
    {
    {}}}
    ,例如:

    var tpl = '{
    {#address}}

    {

    {
    {street}}}

    {
    {/address}}'//输出:

    1 Infinite Loop Cupertino

    • {
      {!comments}}

    !表示注释,注释后不会渲染输出任何内容。

    {
    {!这里是注释}}//输出:

    参考文章:

    转载于:https://www.cnblogs.com/tinaluo/p/7288823.html

    你可能感兴趣的文章
    极光推送(一)集成
    查看>>
    MySQL 8.0 压缩包版安装方法
    查看>>
    @Transient注解输出空间位置属性
    查看>>
    Ansible-playbook 条件判断when、pause(学习笔记二十三)
    查看>>
    5种你未必知道的JavaScript和CSS交互的方法(转发)
    查看>>
    线程进程间通信机制
    查看>>
    galera mysql 多主复制启动顺序及命令
    查看>>
    JS prototype 属性
    查看>>
    中位数性质——数列各个数到中位数的距离和最小
    查看>>
    WebApp之Meta标签
    查看>>
    添加Java文档注释
    查看>>
    Python3批量爬取网页图片
    查看>>
    iphone-common-codes-ccteam源代码 CCEncoding.m
    查看>>
    微信公众平台开发(96) 多个功能整合
    查看>>
    [转]MVC4项目中验证用户登录一个特性就搞定
    查看>>
    用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
    查看>>
    Android 阴影,圆形的Button
    查看>>
    C++概述
    查看>>
    卡特兰数
    查看>>
    006_mac osx 应用跨屏幕
    查看>>