Gidonlarda erişim dizisi öğesine dizine göre nasıl erişebilirim?


270

Gidon şablonu içinde bir dizideki bir öğenin dizinini belirtmek çalışıyorum:

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

bunu kullanarak:

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

Yukarıdakiler mümkün değilse, dizi içindeki spefic bir öğeye erişebilecek bir yardımcı nasıl yazarım?

Yanıtlar:


409

Bunu dene:

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

26
bu hiçbir yerde belgelenmemiştir! Muhteşem.
lukemh

25
Expecting 'ID'{{User.links.websites.1}} veya {{user.links.websites.0}} ile ilgili hata alıyorum
Olivier Lalonde

131
@OlivierLalonde, böyle bir şey kullanmak zorunda kaldım {{ websites.[0] }}.
Matt

4
Gerçekten, @Matt, bu sadece şanslı bir format değil, aynı zamanda belgelenmiş sözdizimidir. (Cevabımı gör.)
Arjan

5
Bir dizideki son öğe ne olacak?
winduptoy

319

Aşağıdaki, dizinden önce ek bir nokta ile , beklendiği gibi çalışır. Burada, köşeli parantezler dizini başka bir özellik izlediğinde isteğe bağlıdır:

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

Bununla birlikte, köşeli parantezler şunlarda gereklidir :

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

İkincisinde, köşeli parantez olmadan dizin numarasını kullanmak bir tane alır:

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

Bir kenara: köşeli parantezler (ayrıca), bölümler arası sözdizimi için , aksi takdirde geçersiz olacak gerçek tanımlayıcılara (dizin numaralarına değil) atıfta bulunmak için kullanılır. Daha fazla bilgi geçerli bir tanımlayıcı nedir?

(YUI'de Gidonlarla test edilmiştir.)

2.xx Güncellemesi

Artık getyardımcıyı bunun için kullanabilirsiniz :

(get people index)

dize olması gereken bir diziyle ilgili bir hata alırsanız, şunları yapın:

(get people (concat index ""))

10
Bu cevap olmalı, çünkü seçilen cevaptan daha ayrıntılı. Dizin sonunda olduğunda köşeli parantez istemek beni bir süre şaşırttı!
Modulitos

bu hile yaptı! teşekkürler ... bunun üzerinde seçilen cevap olmadı, lütfen bunu doğru olarak işaretleyin.
MarioAraya

1
{{#with people.1}}Çözelti kullanılarak, benim için çalıştıcom.github.jknack:handlebars:4.1.2 .
Ferran Maylinch

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

Harika, bu doğru cevap. @index size dizideki konumu verecektir.
Oscar Romero

17

Belgelenmemiş özellikler oyununuz değilse, burada da aynı şey yapılabilir:

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

Sonra bir şablonda

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

Yukarıdakileri yazmadan önce yazdım

this.[0]

Kendi yardımcılarınızı yazmadan birinin gidon ile fazla ilerlediğini göremiyorum.



8

İlk / son getirmek istiyorsanız lütfen bunu deneyin.

{{#each list}}

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

{{/each}}


{{#each list}}

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

{{/each}}

7

Bir dizide döngü yaparken eachve geçerli öğe bağlamında başka bir diziye erişmek istiyorsanız bunu böyle yaparsınız.

İşte örnek veriler.

[
  {
    isim: 'foo',
    attr: ['boo', 'hayvanat bahçesi']
  },
  {
    isim: 'bar',
    attr: ['uzak', 'zar']
  }
]

İşte attrdizideki ilk öğeyi almak için gidon .

{{#her bir oyuncu}}
  <p> {{this.name}} </p>

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

{{/her biri}}

Bu çıktı

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

<p> çubuğu </p>
<p> uzak </p>

attr dizisi farklı nesneler için farklı sayıda öğeye sahipse, o zaman onu yineleme işlemi ne olur? örneğin: [{ad: 'foo', attr: ['boo', 'hayvanat bahçesi']}, {ad: 'bar', attr: ['uzak', 'zar', 'sar]}] sonra nasıl dizinin her nesnesi için tüm attr gösterecek?
Partha Roy

denemedim ama {{#thith this.attr}} thisyerine işe yarayacağını varsayalımthis.[0]
Fatih Acet

1

Dizinin adı yoksa (yalnızca dizi şablona geçirilirse) aşağıdaki sözdizimi de kullanılabilir:

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

0

Benim durumumda böyle bir özel yardımcı içindeki bir diziye erişmek istedim,

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

Bu işe yaramadı, ancak @julesbou tarafından önerilen cevap çalıştı.

Çalışma kodu:

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

Bu yardımcı olur umarım! Şerefe.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.