在Mustache模板中,是否有一种优雅的方式来表达逗号分隔的列表,而不使用后面的逗号?
我正在使用,并试图生成一个逗号分隔的列表,但不带尾随逗号,例如 红,绿,蓝 在给定结构的情况下,创建带有尾随逗号的列表非常简单在Mustache模板中,是否有一种优雅的方式来表达逗号分隔的列表,而不使用后面的逗号?,mustache,Mustache,我正在使用,并试图生成一个逗号分隔的列表,但不带尾随逗号,例如 红,绿,蓝 在给定结构的情况下,创建带有尾随逗号的列表非常简单 { "items": [ {"name": "red"}, {"name": "green"}, {"name": "blue"} ] } 模板呢 {{#items}}{{name}}, {{/items}} 这将决定 红,绿,蓝 但是,如果没有后面的逗号,我就看不到一种优雅的表达方式。在将列表传递到模板之前,我总是可以用代码生成列表
{
"items": [
{"name": "red"},
{"name": "green"},
{"name": "blue"}
]
}
模板呢
{{#items}}{{name}}, {{/items}}
这将决定
红,绿,蓝
但是,如果没有后面的逗号,我就看不到一种优雅的表达方式。在将列表传递到模板之前,我总是可以用代码生成列表,但我想知道库是否提供了一种替代方法,例如允许您检测它是否是模板中列表中的最后一项。Hrm,值得怀疑,它几乎向您展示了first
属性,必须在JSON数据中包含逻辑才能确定何时放置逗号
因此,您的数据看起来像:
{
"items": [
{"name": "red", "comma": true},
{"name": "green", "comma": true},
{"name": "blue"}
]
}
还有你的模板
{{#items}}
{{name}}{{#comma}},{{/comma}}
{{/items}}
<div id="someContainer">
{{#items}}
<span>{{name}}<span>
{{/items}}
</div>
我知道它并不优雅,但Mustache非常轻巧,不提供这样的功能。Hrm,值得怀疑的是,它几乎向您展示了first
属性,您必须在JSON数据中包含逻辑,以确定何时放置逗号
因此,您的数据看起来像:
{
"items": [
{"name": "red", "comma": true},
{"name": "green", "comma": true},
{"name": "blue"}
]
}
还有你的模板
{{#items}}
{{name}}{{#comma}},{{/comma}}
{{/items}}
<div id="someContainer">
{{#items}}
<span>{{name}}<span>
{{/items}}
</div>
我知道它不优雅,但小胡子非常轻巧,不提供这样的功能。我认为更好的方法是动态更改模型。例如,如果您使用的是JavaScript:
model['items'][ model['items'].length - 1 ].last = true;
在模板中,使用倒置部分:
{{#items}}
{{name}}{{^last}}, {{/last}}
{{/items}}
用逗号表示 我认为更好的方法是动态更改模型。例如,如果您使用的是JavaScript:
model['items'][ model['items'].length - 1 ].last = true;
在模板中,使用倒置部分:
{{#items}}
{{name}}{{^last}}, {{/last}}
{{/items}}
用逗号表示 有趣。我知道这有点懒惰,但我通常通过在值赋值中使用模板而不是试图用逗号分隔值来解决这个问题
var global.items = {};
{{#items}}
global.items.{{item_name}} = {{item_value}};
{{/items}}
有趣。我知道这有点懒惰,但我通常通过在值赋值中使用模板而不是试图用逗号分隔值来解决这个问题
var global.items = {};
{{#items}}
global.items.{{item_name}} = {{item_value}};
{{/items}}
关于胡子是否提供了一种优雅的方式来实现这一点的问题已经得到了回答,但我想到,最优雅的方式可能是使用CSS,而不是更改模型 模板:
<ul class="csl">{{#items}}<li>{{name}}</li>{{/items}}</ul>
{{#removeTrailingComma}}{{#items}}{{name}}, {{/items}}{{/removeTrailingComma}}
这在IE8+和其他现代浏览器中都可以使用。关于胡子是否提供了一种优雅的方式来实现这一点的问题已经得到了回答,但我突然想到,最优雅的方式可能是使用CSS,而不是更改模型 模板:
<ul class="csl">{{#items}}<li>{{name}}</li>{{/items}}</ul>
{{#removeTrailingComma}}{{#items}}{{name}}, {{/items}}{{/removeTrailingComma}}
这适用于IE8+和其他现代浏览器。欺骗并使用CSS
如果您的模型是:
{
"items": [
{"name": "red"},
{"name": "green"},
{"name": "blue"}
]
}
然后制作模板
{{#items}}
{{name}}{{#comma}},{{/comma}}
{{/items}}
<div id="someContainer">
{{#items}}
<span>{{name}}<span>
{{/items}}
</div>
我猜有人会说,在演示文稿中添加标记是一个糟糕的情况,但我不认为是这样。逗号分隔值是一种表示决策,可以使解释底层数据更容易。这类似于在条目上交替字体颜色。作弊并使用CSS
如果您的模型是:
{
"items": [
{"name": "red"},
{"name": "green"},
{"name": "blue"}
]
}
然后制作模板
{{#items}}
{{name}}{{#comma}},{{/comma}}
{{/items}}
<div id="someContainer">
{{#items}}
<span>{{name}}<span>
{{/items}}
</div>
我猜有人会说,在演示文稿中添加标记是一个糟糕的情况,但我不认为是这样。逗号分隔值是一种表示决策,可以使解释底层数据更容易。这类似于在条目上交替字体颜色。我想不出在许多情况下,您会想在
或之外列出未知数量的条目,但这就是您的做法:
<p>
Comma separated list, in sentence form;
{{#each test}}{{#if @index}}, {{/if}}{{.}}{{/each}};
sentence continued.
</p>
请注意,这是车把<如果test
是一个数组,code>@index
将起作用。我想不出有多少情况下你会想在
或
之外列出未知数量的项目,但这就是你要做的:
<p>
Comma separated list, in sentence form;
{{#each test}}{{#if @index}}, {{/if}}{{.}}{{/each}};
sentence continued.
</p>
请注意,这是车把<如果test
是一个数组,code>@index
将起作用。在Mustache中没有内置的方法。你必须改变你的模型来支持它
在模板中实现这一点的一种方法是使用反向选择hat{{^last}}{{/last}}
标记。它只会省略列表中最后一个项的文本
{{{#items}
{{name}{{{^last}},{{{/last}
{{/items}
或者,如果您使用的是具有继承性的语言,则可以将分隔符字符串添加到对象中,如“”、“
”,或者理想情况下添加到基类中,然后将最后一个元素的“delimiter”设置为空字符串,如下所示:
{{{#items}
{{name}}{{delimiter}}
{{/items}
在小胡子中没有内置的方法来实现这一点。你必须改变你的模型来支持它
在模板中实现这一点的一种方法是使用反向选择hat{{^last}}{{/last}}
标记。它只会省略列表中最后一个项的文本
{{{#items}
{{name}{{{^last}},{{{/last}
{{/items}
或者,如果您使用的是具有继承性的语言,则可以将分隔符字符串添加到对象中,如“”、“
”,或者理想情况下添加到基类中,然后将最后一个元素的“delimiter”设置为空字符串,如下所示:
{{{#items}
{{name}}{{delimiter}}
{{/items}
如果您碰巧正在使用,您可以使用特殊的-first
或-last
变量:
{{#items}}{{name}}{{^-last}}, {{/-last}}{{/items}}
如果您碰巧正在使用,可以使用特殊的-first
或-last
变量:
{{#items}}{{name}}{{^-last}}, {{/-last}}{{/items}}
对于JSON数据,我建议:
Mustache.render(模板,设置)。替换(/,(?=\s*[}\]])/mig,”代码>
regexp将删除最后一个属性之后挂起的任何,
这也将从包含“,}”或“,]”的字符串值中删除,
,因此请确保您知道将在JSON中放入哪些数据,我建议:
Mustache.render(模板,设置)。替换(/,(?=\s*[}\]])/mig,”代码>
T