Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mustache模板中,是否有一种优雅的方式来表达逗号分隔的列表,而不使用后面的逗号?_Mustache - Fatal编程技术网

在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