17

リストが空の場合、これを出力したい:

<div id="some-id">
</div>

リストが空でない場合、これを出力したい:

<div id="some-id">
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>etc</li>
  </ul>
</div>

<ul></ul>タグを最大で 1 回出力し、リストが空でない場合にのみ出力することに注意してください。

次のコードは、PHP でこれを行う方法に近いですが、明らかに間違っています。

<div id="some-id">
{{#items}}
  <ul>
{{/items}}

{{#items}}
    <li>{{name}}</li>
{{/items}}

{{#items}}
  </ul>
{{/items}}
</div>

itemsが 3 項目リストの場合、 3 を取得します<ul>- 明らかに私が望むものではありません。

他のキーをブール値フラグ ( hasItems、おそらく) として設定できることはわかっていますが、これは冗長に感じます。

空でないリストに対してブロックを一度だけ出力できる、より洗練された方法はありますか?

4

3 に答える 3

1

他の 2 つの回答は、Mustache の Ruby 実装では機能しません。私の解決策は、テンプレート コンテキストの一部として追加のパラメーターを送信することでした。例えば

template = <<EOF
{{#has_items}}
<ul>
    {{#items}}
        <li>{{.}}</li>
    {{/items}}
</ul>
{{/has_items}}
EOF
items = ['one', 'two', 'three']
context = { items: items, has_items: items.any? }
Mustache.render(template, context)
于 2017-05-19T19:43:32.453 に答える