mustache 胡子 无逻辑模板介绍 和 json 逗号解决方案

官方网站:

https://mustache.github.io/mustache.5.html

概要

mustache - Logic-less templates.

mustache - 无逻辑模板

经典的Mustache 模板:

Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}

给定以下哈希值:

{
  "name": "Chris",
  "value": 10000,
  "taxed_value": 10000 - (10000 * 0.4),
  "in_ca": true
}

将产生以下内容:

Hello Chris
You have just won 10000 dollars!
Well, 6000.0 dollars, after taxes.

问题:产生逗号的原因

json的数据,需要拼接逗号,但是逗号出现的情况有多重

解决办法

{
  {{#a}}
  {{#b}}
  ,
  {{/b}}
  {{/a}}
  {{#b}}
  {{/b}}
}

描述

Mustache 可以用于HTML,配置文件,源代码-任何东西。它通过使用散列或对象中提供的值在模板中扩展标签来工作。

我们称其为“无逻辑”,因为没有if语句,else子句或for循环。相反,只有标签。有些标签被替换为一个值,有些则被替换为空,而另一些则被替换为一系列值。本文档介绍了Mustache标签的不同类型。

标签类型

标签由 double mustaches. {{person}} 是一个标签,和一样 {{#person}}. 在这两个示例中,我们将其person称为键或标记键。让我们谈谈不同类型的标签。

变数

最基本的标签类型是变量。一个 {{name}} 在一个基本的模板标签将尝试找到name在目前情况下键。如果没有name键,则将递归检查父上下文。如果到达最上层上下文并且name仍然找不到该键,则不会呈现任何内容。

默认情况下,所有变量都是HTML转义的。如果要返回未转义的HTML,请使用 triple mustache: {{{name}}}.

您还可以使用&取消转义变量: {{& name}}. 更改定界符时,这可能很有用(请参见下面的“设置定界符”)。

默认情况下,变量“ miss”返回空字符串。通常可以在您的Mustache库中进行配置。例如,Mustache的Ruby版本支持在这种情况下引发异常。

模板 Template:

* {{name}}
* {{age}}
* {{company}}
* {{{company}}}

Hash:

{
  "name": "Chris",
  "company": "<b>GitHub</b>"
}

输出 Output:

* Chris
*
* &lt;b&gt;GitHub&lt;/b&gt;
* <b>GitHub</b>

栏目Sections

部分根据当前上下文中键的值,将文本块渲染一次或多次。

一段以井号开始,以斜杠结束。也就是说, {{#person}} begins a “person” section while {{/person}} ends it.

该部分的行为由键的值确定。

假值或空列表

如果person键存在并且值为false或空白列表,则不会显示井号和斜杠之间的HTML。

模板 Template:

Shown.
{{#person}}
  Never shown!
{{/person}}

Hash:

{
  "person": false
}

输出 Output:

Shown.

非空清单

如果person键存在并且具有非false值,则井号和斜杠之间的HTML将被渲染并显示一次或多次。

当值是非空列表时,对于列表中的每个项目,块中的文本将显示一次。每次迭代时,块的上下文将被设置为当前项。这样我们就可以遍历集合。

模板 Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}

Hash:

{
  "repo": [
    { "name": "resque" },
    { "name": "hub" },
    { "name": "rip" }
  ]
}

输出 Output:

<b>resque</b>
<b>hub</b>
<b>rip</b>

Lambdas

When the value is a callable object, such as a function or lambda, the object will be invoked and passed the block of text. The text passed is the literal block, unrendered. {{tags}} will not have been expanded - the lambda should do that on its own. In this way you can implement filters or caching.

模板:Template:

{{#wrapped}}
  {{name}} is awesome.
{{/wrapped}}

Hash:

{
  "name": "Willy",
  "wrapped": function() {
    return function(text, render) {
      return "<b>" + render(text) + "</b>"
    }
  }
}

输出 Output:

<b>Willy is awesome.</b>

非假值 Non-False Values

当该值是非false而不是列表时,它将用作块的单个呈现的上下文。

模板:Template:

{{#person?}}
  Hi {{name}}!
{{/person?}}

Hash:

{
  "person?": { "name": "Jon" }
}

输出 Output:

Hi Jon!

Inverted Sections 倒段

倒置的部分以尖号(帽子)开始,以斜线结束. That is {{^person}} begins a “person” inverted section while {{/person}} ends it.

section可用于根据键的值一次或多次呈现文本,相反的section可根据键的逆值呈现文本一次。也就是说,如果键不存在、为false或列表为空,则将呈现它们。

模板:Template:

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

Hash:

{
  "repo": []
}

输出:Output:

No repos :(

注释:Comments

注释一开始就会被忽略。以下模板:

<h1>Today{{! ignore me }}.</h1>

将呈现如下:

<h1>Today.</h1>

评论中可能包含换行符。

部分:Partials

偏号以大于号开头,例如 {{> box}}.

部分是在运行时呈现的(与编译时相反),因此递归部分是可能的。只是避免无限循环。

它们还继承了调用上下文。而在[ERB](http://en.wikipedia.org/wiki/ERuby)文件中,您可能会这样:

<%= partial :next_more, :start => start, :size => size %>

Mustache 只需要这样:

{{> next_more}}

为什么?因为该next_more.mustache文件将从调用上下文中继承size和 start方法。

通过这种方式,您可能会想将部分视为包括,导入,模板扩展,嵌套模板或子模板,即使这些从字面上看并非如此。

例如,此模板和部分模板:

base.mustache:
<h2>Names</h2>
{{#names}}
  {{> user}}
{{/names}}

user.mustache:
{{name}}

可以认为是单个扩展模板:

<h2>Names</h2>
{{#names}}
  <strong>{{name}}</strong>
{{/names}}

设置定界符Set Delimiter

Set Delimiter标签以等号开头,并将标签定界符从{{和更改}}为自定义字符串。

考虑以下人为的示例:

* {{default_tags}}
{{=<% %>=}}
* <% erb_style_tags %>
<%={{ }}=%>
* {{ default_tags_again }}

在这里,我们列出了三个项目。第一项使用默认标记样式,第二项使用Set Delimiter标记定义的erb样式,第三项在另一个Set Delimiter声明之后返回默认样式。

根据ctemplates的说法,“这对于TeX这样的语言很有用,因为TeX可能在文本中出现双括号,并且很难用于标记。”

自定义定界符不得包含空格或等号。

Custom delimiters may not contain whitespace or the equals sign.

COPYRIGHT
Mustache is Copyright © 2009 Chris Wanstrath

Original CTemplate by Google

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值