Mustache templates: How to output a block only once for non-empty lists
mustache
Solution
You could use non-false values of a section. `name` would have to be an object inside of `items`
data = { 'items' : { 'name' : ["Item 1", "Item 2", "etc"] } };
You template would look like:
<div id="some-id">
{{#items}}
<ul>
{{#name}}
<li>{{.}}</li>
{{/name}}
</ul>
{{/items}}
</div>
Here's an example on jsFiddle showing the rendering of an `items` object with names and without -- http://jsfiddle.net/maxbeatty/fpQwk/
Problem
If my list is empty, I want to output this: ``` <div id="some-id"> </div> ``` If my list is non-empty, I want to output this: ``` <div id="some-id"> <ul> <li>Item 1</li> <li>Item 2</li> <li>etc</li> </ul> </div> ``` Note that I output the `<ul>` and `</ul>` tags at most once, and only if the list is non-empty. The following code is close to how I would do this in PHP, but is obviously wrong: ``` <div id="some-id"> {{#items}} <ul> {{/items}} {{#items}} <li>{{name}}</li> {{/items}} {{#items}} </ul> {{/items}} </div> ``` If `items` is a 3 item list, I'm going to get 3 `<ul>`'s - obviously not what I want. I realise I could set some other key as a boolean flag (`hasItems`, perhaps), but this feels redundant. Is there a more elegant way I can output a block only once for a non-empty list?