Como encontrar o comprimento do Array dentro dos modelos do Handlebar?

86

Eu tenho um modelo de barras de guia que é processado usando um objeto json. Neste json estou enviando um array. Como isso:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

Agora, em meu modelo, quero encontrar o comprimento dessa matriz. Algo como:

{{#each item}}
   {{ array.length }}
{{/each}}

Não foi possível encontrar na documentação do guiador.

Abhidev
fonte

Respostas:

189

Foi mal....

{{array.length}}realmente funcionou dentro do modelo. Deveria ter verificado / testado antes de postar aqui.

Abhidev
fonte
37
bem, você me salvou de ter que testá-lo, então, obrigado. :)
Perry Tew de
8
Isso não funciona pelo menos para o tipo de guidão Mandrills para quem está se perguntando. Ainda não encontrei um substituto adequado.
oneirois
43

Neste caso, você precisa fazer referência à variável pai de each de dentro de cada bloco:

{{#each array}}
    {{../array.length}}
{{/each}}

Acho que o fato de sua variável ser chamada de "array" provavelmente está confundindo o problema também. Vamos supor algum JSON diferente apenas para esclarecer:

var json = {
    "fruit":["apple","orange","banana"]
};

Então, fazendo isso:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

Iria render:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>
Kevin Powell
fonte
1
Acho que os itens da lista seriamapple 0 3 orange 1 3 banana 2 3
Paul
@Paul, você está correto, exemplo atualizado para refletir a saída correta.
Kevin Powell
Pergunta relacionada: como você obtém o comprimento de uma matriz quando é o valor do pipeline atual?
Gyscos,
Sintaticamente, essa resposta faz mais sentido do que a resposta aceita.
Neil Monroe de
2

Você pode definir um ajudante simples para lidar com isso:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

E então use-o em seu modelo, por exemplo:

{{get_length some_object}}
gesiud
fonte
1

Se você estiver testando uma lista vazia para exibir o conteúdo ... Em Ember.js que usa guiador, você pode ter um outro para o #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Epirocks
fonte