handlerbars.js检查列表是否为空

Dre*_*ejc 113 handlebars.js

在进行并迭代列表/集合之前,Handlebars.js是否有一种方法可以检查集合或列表是空还是空?

// if list is empty do some rendering ... otherwise do the normal
{{#list items}}

{{/list}}



{{#each items}}

{{/each}}
Run Code Online (Sandbox Code Playgroud)

Dua*_*ane 220

如果您想要显示一次,并且只有阵列有数据,请使用

{{#if items.length}}
    //Render
{{/if}}
Run Code Online (Sandbox Code Playgroud)

.length 对于空数组将返回0,因此我们实现了一个真正的假值.

  • 不,我同意,这是正确的答案.它不包括for循环. (15认同)
  • 简单的情况:我想为列表中的每个项呈现一次`<ul>`标记和一个`<li>`标记.如果列表为空,我甚至不想要渲染`<ul>`,并且在`<ul>`中渲染像`<p>空列表<p>`这样的东西没有意义. (4认同)
  • 这个答案是特定于实现的。[handlebars docs](http://handlebarsjs.com/builtin_helpers.html#conditionals)指定将[[]`评估为false。@Drejc的答案是根据车把规格的正确答案。 (2认同)

Emr*_*ndi 202

"each"标签也可以采用"else"部分.所以最简单的形式是:

{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Run Code Online (Sandbox Code Playgroud)

  • 这很酷,但没有回答问题。如果您希望标签包裹`#each`,就像`&lt;ul&gt;`标签(里面有`&lt;li&gt;`),您不希望空状态被`&lt;ul&gt;`包裹。 (2认同)

Dre*_*ejc 36

好吧,它比我想象的更简单:

{{#if items}}
// render items

{{#each items}}
// render item
{{/each}}

{{else}}
// render empty
{{/if}}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的.我基于原生JS'if`的行为先发制人地评论,但[Handlebars文档](http://handlebarsjs.com/builtin_helpers.html#conditionals)非常清楚:"如果它的参数返回`false`, undefined`,`null`,`""`,`0`或`[]`,Handlebars不会渲染块." 我应该先检查一下这些文档. (10认同)
  • 如果`items`是一个空数组(即值为`[]`),它将产生一个真值.而`items.length`为空数组产生一个falsey值.见[@Duane的答案](http://stackoverflow.com/questions/10381827/handlerbars-js-check-if-list-is-empty/21611066#21611066). (4认同)

Kar*_*l.S 7

如果要检查集合(光标)是否为空,之前的答案将无用,您必须使用以下count()方法:

{{#if items.count}}
    <p>There is {{items.count}} item(s).</p>
{{else}}
    <p>There is nothing</p>
{{/if}}
Run Code Online (Sandbox Code Playgroud)

  • @BasicWolf它没有,count用光标,如果你有数组使用长度而不是. (2认同)