Come si accede a un elemento dell'array di accesso in base all'indice nel manubrio?


270

Sto cercando di specificare l'indice di un elemento in un array all'interno di un modello di manubrio:

{
  people: [
    {"name":"Yehuda Katz"},
    {"name":"Luke"},
    {"name":"Naomi"}
  ]
}

usando questo:

<ul id="luke_should_be_here">
{{people[1].name}}
</ul>

Se quanto sopra non fosse possibile, come scriverei un helper che possa accedere a un elemento specifico all'interno dell'array?

Risposte:


409

Prova questo:

<ul id="luke_should_be_here">
{{people.1.name}}
</ul>

26
questo non è documentato da nessuna parte! Eccezionale.
lukemh,

25
Ricevo un Expecting 'ID'errore con {{user.links.we Sites.1}} o {{user.links.we website.0}}
Olivier Lalonde

131
@OlivierLalonde, ho dovuto usare qualcosa del genere {{ websites.[0] }}.
Matt,

4
In effetti, @Matt, non è solo un formato fortunato, ma è una specie di sintassi documentata. (Vedi la mia risposta.)
Arjan

5
Che dire dell'ultimo elemento in un array?
winduptoy,

319

Quanto segue, con un punto aggiuntivo prima dell'indice , funziona esattamente come previsto. Qui, le parentesi quadre sono opzionali quando l'indice è seguito da un'altra proprietà:

{{people.[1].name}}
{{people.1.name}}

Tuttavia, le parentesi quadre sono richieste in:

{{#with people.[1]}}
  {{name}}
{{/with}}

In quest'ultimo caso, usando il numero indice senza parentesi quadre si otterrebbe uno:

Error: Parse error on line ...:
...     {{#with people.1}}                
-----------------------^
Expecting 'ID', got 'INTEGER'

A parte: le parentesi vengono (anche) utilizzate per la sintassi letterale di segmento , per fare riferimento a identificatori effettivi (non numeri di indice) che altrimenti non sarebbero validi. Maggiori dettagli in Che cos'è un identificatore valido?

(Testato con manubrio in YUI.)

Aggiornamento 2.xx

Ora puoi usare l' gethelper per questo:

(get people index)

sebbene se ricevi un errore sull'indice che deve essere una stringa, esegui:

(get people (concat index ""))

10
Questa dovrebbe essere la risposta perché è più approfondita della risposta selezionata. Richiedere parentesi quadre quando l'indice è alla fine mi ha bloccato per un po '!
Modulitos,

questo ha fatto il trucco! grazie ... la risposta scelta sopra non ha funzionato, contrassegnala come corretta.
MarioAraya,

1
La {{#with people.1}}soluzione ha funzionato per me, usando com.github.jknack:handlebars:4.1.2.
Ferran Maylinch,

21
{{#each array}}
  {{@index}}
{{/each}}

Fantastico, questa è la risposta corretta. @index ti darà la posizione nella matrice.
Oscar Romero,

17

Se le funzionalità non documentate non sono il tuo gioco, lo stesso può essere realizzato qui:

Handlebars.registerHelper('index_of', function(context,ndx) {
  return context[ndx];
});

Quindi in un modello

{{#index_of this 1}}{{/index_of}}   

Ho scritto quanto sopra prima di ottenere una sospensione

this.[0]

Non riesco a vederne uno andare troppo lontano con il manubrio senza scrivere i tuoi aiutanti.



8

Prova questo, se vuoi recuperare il primo / l'ultimo.

{{#each list}}

    {{#if @first}}
        <div class="active">
    {{else}}
        <div>
    {{/if}}

{{/each}}


{{#each list}}

    {{#if @last}}
        <div class="last-element">
    {{else}}
        <div>
    {{/if}}

{{/each}}

7

Mentre esegui il looping in un array con eache se desideri accedere a un altro array nel contesto dell'elemento corrente, lo fai in questo modo.

Ecco i dati di esempio.

[
  {
    nome: "pippo",
    attr: ['boo', 'zoo']
  },
  {
    nome: "bar",
    attr: ['far', 'zar']
  }
]

Ecco i manubri per ottenere il primo elemento nella attrmatrice.

{{#each player}}
  <p> {{this.name}} </p>

  {{#with this.attr}}
    <p> {{this. [0]}} </p>
  {{/con}}

{{/ogni}}

Questo produrrà

<p> foo </p>
<p> boo </p>

<p> barra </p>
<p> lontano </p>

se l'array attr ha un numero diverso di elementi per oggetti diversi, quale sarà il processo per iterarlo? ad esempio: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['far', 'zar', 'sar]}] quindi come sono hai intenzione di mostrare tutto l'attr per tutti gli oggetti dell'array?
Partha Roy,

non l'ho provato ma presumo in {{#with this.attr}} thisavrebbe funzionato invece dithis.[0]
Fatih Acet

1

La seguente sintassi può essere utilizzata anche se l'array non è denominato (solo l'array viene passato al modello):

  <ul id="luke_should_be_here">
  {{this.1.name}}
  </ul>

0

Nel mio caso, volevo accedere a un array all'interno di un helper personalizzato in questo modo,

{{#ifCond arr.[@index] "foo" }}

Che non ha funzionato, ma la risposta suggerita da @julesbou ha funzionato.

Codice di lavoro:

{{#ifCond (lookup arr @index) "" }}

Spero che questo ti aiuti! Saluti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.