Gidon 'her' döngüsü olan üst öğenin özelliklerine erişin


204

Aşağıdaki basitleştirilmiş verileri göz önünde bulundurun:

var viewData = {
    itemSize: 20,
    items: [
        'Zimbabwe', 'dog', 'falafel'
    ]
};

Ve bir Gidon şablonu:

{{#each items}}
    <div style="font-size:{{itemSize}}px">{{this}}</div>
{{/each}}

eachDöngü içinde, üst kapsam erişilebilir değil - en azından denediğim şekilde bu işe yaramaz . Bunu yapmanın bir yolu olduğunu umuyorum!

Yanıtlar:


423

Bunu başarmanın iki geçerli yolu vardır.

Üst kapsamın ../

../Özellik adına ekleyerek üst kapsama başvurabilirsiniz.

{{#each items}}
    <div style="font-size:{{../itemSize}}px">{{this}}</div>
    {{#if this.items.someKey}}
       <div style="font-size:{{../../itemSize}}px">{{this}}</div>  
    {{/if}}
{{/each}}

Tekrarlayarak birden fazla seviye yukarı gidebilirsiniz ../. Örneğin, iki seviye yukarı gitmek için kullanın ../../key.

Daha fazla bilgi için yollardaki Gidon belgelerine bakın .

Kök kapsamının @root

@rootÖzellik yoluna geçerek , en üst kapsamdan aşağıya doğru gidebilirsiniz ( caballerog'un cevabında gösterildiği gibi ).

Daha fazla bilgi için @data değişkenleriyle ilgili Gidon belgelerine bakın .


101
Üst özellikleri almak için ../ kullanımı hakkında bir not. Yuvalanmış # if içeren her bir deyiminiz varsa, sadece ../ yapmak sizi #each düzeyine götürür. Yani #each dışında ebeveynine geri dönmek için ../../itemSize yapmak zorundasınız
TheStoneFox

1
Bu işlevi mustache.js şablon motorunda nasıl edinebilirim?
13'te

2
@blushrt yapmazsın. Bu gidonlara özel
19h

3
@TheTaxPayer az önce beni büyük miktarda baş ağrısından kurtardın! çoraplarını sallamak :)
Peter

4
Üst düzey # her değeri bir yardımcıya aktarmaya ne dersiniz
Oleg Belousov

60

Yeni yöntem nokta gösterimini kullanıyor, eğik çizgi işareti kullanımdan kaldırılıyor ( http://handlebarsjs.com/expressions.html ).

Dolayısıyla, ebeveyn öğelerine erişim için gerçek yöntem aşağıdaki gibidir:

@root.grandfather.father.element
@root.father.element

Özel örneğinizde şunları kullanırsınız:

{{#each items}}
 <div style="font-size:{{@root.viewData.itemSize}}px">{{this}}</div>
{{/each}}

Resmi belgelerden başka bir yöntem ( http://handlebarsjs.com/builtin_helpers.html ) takma ad kullanmaktır

Her bir yardımcı ayrıca blok parametrelerini destekler ve blokta herhangi bir yerde adlandırılmış referanslara izin verir.

{{#each array as |value key|}}  
 {{#each child as |childValue childKey|}}
     {{key}} - {{childKey}}. {{childValue}}   
 {{/each}} 
{{/each}} 

Çocukların derinlemesine değişken referanslara ihtiyaç duymadan erişebilecekleri bir anahtar ve değer değişkeni oluşturur. Yukarıdaki örnekte, {{key}}> {{@ .. / key}} ile aynıdır, ancak çoğu durumda daha okunabilirdir.


1
Benim için bir seviye yukarı çıkmak "@ root.itemSize" kullanarak çalıştı.
Sam Tyson
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.