如何使用 Mustache 模板从字符串列表中获取术语子句的动态列表
How to get a dynamic list of term clauses from a list of strings using Moustache template
我有一个字符串列表,例如items = ["red", "green", "blue", ...]
并且我想使用模板来获取
"should": [
{
"term": {
"mycolor": "red"
}
},
{
"term": {
"mycolor": "green"
}
},
{
"term": {
"mycolor": "blue"
}
},
...
]
现在我正在尝试
"should": [
{{#items}}
{
"term": {
"mycolor" : "{{.}}"
}
},
{{/items}}
]
但它不起作用,因为末尾会有一个尾随逗号。我怎样才能去掉尾随的逗号来完成这项工作?
我自己找到了答案。 Moustache 是一个“无逻辑”的模板工具,所以似乎没有比我在这里尝试的更好的选择了。如果您有更好的想法,请补充答案或评论。
要呈现多个术语子句并处理尾随逗号,我可以做到
"should": [
{{#items}}
{
"term": {
"mycolor" : "{{color}}"
}
}
{{^last}},{{/last}}
{{/items}}
]
其中项目是这样的对象列表
params: {
"items": [{
"color": "red"
},
{
"color": "green"
},
{
"color": "blue",
"last": 1
}]
}
使用 ^
运算符,即“反转部分”,模板知道在出现“last”时不呈现逗号。
更高级的案例
如果您必须在某些现有条款之上添加此条款条款列表,例如在“mysize”
之上添加这些“mycolor”术语
"should": [
{
"term": {
"mycolor": "red"
}
},
{
"term": {
"mycolor": "green"
}
},
{
"term": {
"mycolor": "blue"
}
},
{
"term": {
"mysize": "xl"
}
},
{
"term": {
"mysize": "l"
}
},
...
]
您将需要处理任一列表为空的情况,并处理是否在它们之间添加逗号,即如果“mysize”列表不为空,“mycolor”应该有尾随逗号,否则没有。在这种情况下,我们需要根据第二个列表是否为空来呈现单个逗号。如果我们使用第二个列表 sizes
作为标签,它不起作用,因为 Mustache 将渲染逗号 N 次,其中 N 是 sizes
的长度。据我所知,无法根据非空列表呈现 once。所以我必须引入另一个参数 sizesExist
并在你的代码中设置它。
"should": [
{{#colors}}
{
"term": {
"mycolor" : "{{color}}"
}
}
{{^last}},{{/last}}
{{#sizesExist}},{{/sizesExist}}
{{/colors}}
{{#sizes}}
{
"term": {
"mysize" : "{{size}}"
}
}
{{^last}},{{/last}}
{{/sizes}}
]
params: {
"colors": [...],
"sizes": [...],
"sizesExist": true
}
我有一个字符串列表,例如items = ["red", "green", "blue", ...]
并且我想使用模板来获取
"should": [
{
"term": {
"mycolor": "red"
}
},
{
"term": {
"mycolor": "green"
}
},
{
"term": {
"mycolor": "blue"
}
},
...
]
现在我正在尝试
"should": [
{{#items}}
{
"term": {
"mycolor" : "{{.}}"
}
},
{{/items}}
]
但它不起作用,因为末尾会有一个尾随逗号。我怎样才能去掉尾随的逗号来完成这项工作?
我自己找到了答案。 Moustache 是一个“无逻辑”的模板工具,所以似乎没有比我在这里尝试的更好的选择了。如果您有更好的想法,请补充答案或评论。
要呈现多个术语子句并处理尾随逗号,我可以做到
"should": [
{{#items}}
{
"term": {
"mycolor" : "{{color}}"
}
}
{{^last}},{{/last}}
{{/items}}
]
其中项目是这样的对象列表
params: {
"items": [{
"color": "red"
},
{
"color": "green"
},
{
"color": "blue",
"last": 1
}]
}
使用 ^
运算符,即“反转部分”,模板知道在出现“last”时不呈现逗号。
更高级的案例
如果您必须在某些现有条款之上添加此条款条款列表,例如在“mysize”
之上添加这些“mycolor”术语"should": [
{
"term": {
"mycolor": "red"
}
},
{
"term": {
"mycolor": "green"
}
},
{
"term": {
"mycolor": "blue"
}
},
{
"term": {
"mysize": "xl"
}
},
{
"term": {
"mysize": "l"
}
},
...
]
您将需要处理任一列表为空的情况,并处理是否在它们之间添加逗号,即如果“mysize”列表不为空,“mycolor”应该有尾随逗号,否则没有。在这种情况下,我们需要根据第二个列表是否为空来呈现单个逗号。如果我们使用第二个列表 sizes
作为标签,它不起作用,因为 Mustache 将渲染逗号 N 次,其中 N 是 sizes
的长度。据我所知,无法根据非空列表呈现 once。所以我必须引入另一个参数 sizesExist
并在你的代码中设置它。
"should": [
{{#colors}}
{
"term": {
"mycolor" : "{{color}}"
}
}
{{^last}},{{/last}}
{{#sizesExist}},{{/sizesExist}}
{{/colors}}
{{#sizes}}
{
"term": {
"mysize" : "{{size}}"
}
}
{{^last}},{{/last}}
{{/sizes}}
]
params: {
"colors": [...],
"sizes": [...],
"sizesExist": true
}