Bagaimana cara mengakses item array akses dengan indeks di setang?


270

Saya mencoba menentukan indeks suatu item dalam array di dalam template setang:

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

menggunakan ini:

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

Jika hal di atas tidak memungkinkan, bagaimana cara saya menulis pembantu yang dapat mengakses item spefic di dalam array?

Jawaban:


409

Coba ini:

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

26
ini tidak didokumentasikan di mana pun! Luar biasa.
lukemh

25
Saya mendapatkan Expecting 'ID'kesalahan dengan {{user.links.websites.1}} atau {{user.links.websites.0}}
Olivier Lalonde

131
@ OlivierLalonde, saya harus menggunakan sesuatu seperti {{ websites.[0] }}.
Matt

4
Memang, @Matt, itu bukan hanya beberapa format yang beruntung, tetapi semacam sintaks yang didokumentasikan. (Lihat jawaban saya.)
Arjan

5
Bagaimana dengan elemen terakhir dalam array?
winduptoy

319

Berikut ini, dengan titik tambahan sebelum indeks , berfungsi seperti yang diharapkan. Di sini, tanda kurung adalah opsional ketika indeks diikuti oleh properti lain:

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

Namun, tanda kurung diperlukan dalam:

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

Dalam yang terakhir, menggunakan nomor indeks tanpa tanda kurung akan mendapatkan satu:

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

Sebagai tambahan: tanda kurung (juga) digunakan untuk sintaks segmen-literal , untuk merujuk ke pengidentifikasi yang sebenarnya (bukan nomor indeks) yang jika tidak akan valid. Lebih detail dalam Apa itu pengidentifikasi yang valid?

(Diuji dengan Setang di YUI.)

2.xx Pembaruan

Anda sekarang dapat menggunakan gethelper untuk ini:

(get people index)

meskipun jika Anda mendapatkan kesalahan tentang indeks yang harus berupa string, lakukan:

(get people (concat index ""))

10
Ini harus menjadi jawaban karena lebih menyeluruh daripada jawaban yang dipilih. Membutuhkan tanda kurung siku saat indeks pada akhirnya membuatku macet untuk sementara waktu!
modulitos

ini berhasil! terima kasih ... jawaban yang dipilih di atas ini tidak, tandai ini sebagai yang benar.
MarioAraya

1
The {{#with people.1}}solusi bekerja untuk saya, menggunakan com.github.jknack:handlebars:4.1.2.
Ferran Maylinch

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

Luar biasa, Ini adalah jawaban yang benar. @index akan memberi Anda posisi dalam array.
Oscar Romero

17

Jika fitur tidak berdokumen bukan permainan Anda, hal yang sama dapat dilakukan di sini:

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

Kemudian di templat

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

Saya menulis di atas sebelum saya mendapatkan

this.[0]

Saya tidak bisa melihat satu terlalu jauh dengan setang tanpa menulis pembantu Anda sendiri.



8

Silakan coba ini, jika Anda ingin mengambil pertama / terakhir.

{{#each list}}

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

{{/each}}


{{#each list}}

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

{{/each}}

7

Saat Anda mengulang dalam array dengan eachdan jika Anda ingin mengakses array lain dalam konteks item saat ini Anda melakukannya seperti ini.

Berikut adalah contoh datanya.

[
  {
    nama: 'foo',
    attr: ['boo', 'zoo']
  },
  {
    nama: 'bar',
    attr: ['far', 'zar']
  }
]

Ini adalah setang untuk mendapatkan item pertama dalam attrarray.

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

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

{{/setiap}}

Ini akan menampilkan

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

<p> bar </p>
<p> jauh </p>

jika array attr memiliki jumlah elemen yang berbeda untuk objek yang berbeda maka apa yang akan menjadi proses untuk beralih melalui itu? misalnya: [{name: 'foo', attr: ['boo', 'zoo']}, {name: 'bar', attr: ['far', 'zar', 'sar]}] lalu apa kabar Anda akan menunjukkan semua attr untuk setiap objek array?
Partha Roy

saya tidak mencobanya tetapi saya berasumsi dalam {{#with this.attr}} thisakan berfungsi sebagai gantinyathis.[0]
Fatih Acet

1

Sintaks berikut juga dapat digunakan jika array tidak bernama (hanya array dilewatkan ke templat):

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

0

Dalam kasus saya, saya ingin mengakses array di dalam pembantu kustom seperti itu,

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

Yang tidak berhasil, tetapi jawaban yang disarankan oleh @julesbou berhasil.

Kode kerja:

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

Semoga ini membantu! Bersulang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.