2012-08-09 18 views
223

Projemde şablon oluşturmak için Gidon'ları kullanıyorum. Gidonlarda bir "her" yardımcı oyuncunun mevcut yinelemesinin dizinini almanın bir yolu var mı? (Nesne yineleme durumunda veya anahtar) Gidon indeksi yeni sürümlerindeHer yardımcıda gidonlarda dizin nasıl alınır?

<tbody> 
    {{#each item}} 
     <tr> 
      <td><!--HOW TO GET ARRAY INDEX HERE?--></td> 
      <td>{{this.key}}</td> 
      <td>{{this.value}}</td> 
     </tr> 
    {{/each}} 
</tbody> 
+1

Yapacak Kendi yardımcı kaydedebilirsiniz ile üst nesnenin key erişebilirsiniz

{{#each object}} {{@key}}: {{this}} {{/each}} 

yuvalanmış varsa nesneler:

{{#each array}} //each this = { key: value, key: value, ...} {{#each this}} //each [email protected] and value=this of child object {{@key}}: {{this}} //Or get index number of parent array looping {{@../index}} {{/each}} {{/each}} 

Nesneler: Çocuklarla yineleyebilirsiniz Bu, örneğin: https://gist.github.com/1048968 veya: http://pastebin.com/ksGrVYkz – stusmith

+1

Handlebars-1.0.rc.1.js ile çalışan Gist örneğine başka bir çözüm daha ekledim. https://gist.github.com/1048968#gistcomment-617934 – mlienau

cevap

451

standardı, her bir yardımcı ile birlikte varsayılan olarak sağlanır.


pasajı dan: nesne yineleme için

{{#each array}} 
    {{@index}}: {{this}} 
{{/each}} 

yerine @key kullanın:: https://github.com/wycats/handlebars.js/issues/250#issuecomment-9514811

akım dizi öğenin dizin @total yoluyla süredir mevcut olmuştur

+9

İndirgemediğim için özür dilerim. Bir bağış olması gerekiyordu, ama zamanla kilitlendiğini fark ettim. – Undistraction

+56

Çeşitli durumlarda bunu uygulamaya çalıştım, her defasında konsolda bir hata alıyorum. 'Uncaught SyntaxError: Beklenmeyen belirteci,' – waltfy

+0

waltercarvalho – dmkc

19

Bu, Ember'in daha yeni sürümlerinde değişmiştir. Dizilerin için

:

{{#each array}} 
    {{_view.contentIndex}}: {{this}} 
{{/each}} 

#each blok artık nesneler üzerinde çalışır gibi görünüyor. Benim önerim bunun için kendi yardımcı işlevinizi yuvarlamaktır.

tip için teşekkürler.

12

Bunun çok geç olduğunu biliyorum.

Java Script: Ama şu Kanunu ile bu sorunu çözdü

Handlebars.registerHelper('eachData', function(context, options) { 
     var fn = options.fn, inverse = options.inverse, ctx; 
     var ret = ""; 

     if(context && context.length > 0) { 
     for(var i=0, j=context.length; i<j; i++) { 
      ctx = Object.create(context[i]); 
      ctx.index = i; 
      ret = ret + fn(ctx); 
     } 
     } else { 
     ret = inverse(this); 
     } 
     return ret; 
}); 

HTML:

{{#eachData items}} 
{{index}} // You got here start with 0 index 
{{/eachData}} 

Eğer kod şunları yapmalıdır 1'den Dizininizi başlamak istiyorum:

Javascript:

HTML:

Teşekkürler. itibaren gidon Sürüm 3.0

+0

Teşekkürler, @index'in 0'da başladığını ve 1 tabanlı dizine değiştirmek için bir yöntem sağladığını belirttiniz. Tam olarak ihtiyacım olan şey. – Rebs

+0

Size yardımcı olduğumuza sevindim ... :) – Naitik

5

, bu özel örnekte,

{{#each users as |user userId|}} 
    Id: {{userId}} Name: {{user.name}} 
{{/each}} 

, kullanıcı mevcut bağlamda aynı değere sahip olacaktır ve kullanıcı kimliği yineleme için indeks değerine sahip olacaktır. bakın - http://handlebarsjs.com/block_helpers.html blok yardımcıları bölümünde

2

Diziler:

{{#each array}} 
    {{@index}}: {{this}} 
{{/each}} 

Eğer nesnelerin diziler varsa ...Eğer {{@../key}}

İlgili konular