Akses variabel di luar lingkup Handlebars.js setiap loop

188

Saya memiliki template setang.js, seperti ini:

{{externalValue}}

<select name="test">
    {{#each myCollection}}
       <option value="{{id}}">{{title}} {{externalValue}}</option>
    {{/each}}
</select>

Dan ini adalah output yang dihasilkan:

myExternalValue

<select name="test">
       <option value="1">First element </option>
       <option value="2">Second element </option>
       <option value="3">Third element </option>
</select>

Seperti yang diharapkan, saya dapat mengakses iddan titlebidang setiap elemen myCollectionuntuk menghasilkan pilih saya. Dan di luar pilih, externalValuevariabel saya dicetak dengan benar ("myExternalValue").

Sayangnya, dalam teks opsi, externalValue nilai tidak pernah dicetak.

Pertanyaan saya adalah: bagaimana saya bisa mengakses variabel di luar ruang lingkup setang.js masing-masing dari dalam loop?

lucke84
sumber

Jawaban:

454

Mencoba

<option value="{{id}}">{{title}} {{../externalValue}}</option>

The ../segmen jalan referensi template lingkup induk yang harus apa yang Anda inginkan.

pembagi
sumber
10
Jika pembaca masa depan masih mengalami kesulitan seperti saya, lihat komentar untuk jawaban ini di sini. Butuh beberapa saat setelah melihat jawaban ini untuk melihat yang itu. Anda mungkin perlu menggunakan ../berulang kali tergantung pada berapa banyak cakupan dari nilai Anda.
bcmcfc
10
Apakah saya gila atau apakah informasi semacam ini tidak ada di dokumen setang ???
Jesse
1
@spliter akan bekerja pada setang bara .. sepertinya tidak berfungsi
kweku360
1
Tidak tahu @ kweku360. Ini berfungsi untuk para hadis normal. Mungkin Ember menggunakan versi setang yang disesuaikan di mana fungsi ini diimplementasikan dengan cara lain
spliter
1
Terima kasih bung, ini bekerja dengan baik juga dengan Foundation 6 Panini.
Marco
13

Atau Anda dapat menggunakan jalur absolut seperti ini:

<option value="{{id}}">{{title}} {{@root.user.path.to.externalValue}}</option>
kidkkr
sumber
1

Saya melihat banyak tautan dengan 404 untuk dokumentasi tentang topik ini.

Saya memperbaruinya dengan ini, ini berfungsi pada 1 April 2020 :

https://handlebarsjs.com/guide/expressions.html#path-expressions

Beberapa pembantu seperti #with dan #each memungkinkan Anda untuk menyelam ke objek bersarang. Saat Anda memasukkan ../ segmen ke jalur Anda, Setang akan berubah kembali ke konteks induk.

    {{#each people}}
    {{../prefix}} {{firstname}} 
    {{/each}}

Meskipun namanya dicetak ketika dalam konteks komentar, itu masih bisa kembali ke konteks utama (root-object) untuk mengambil awalan.

PERINGATAN

Nilai tepat yang ../ akan menyelesaikan bervariasi berdasarkan pada helper yang memanggil blok. Menggunakan ../ hanya diperlukan ketika konteks berubah. Anak-anak pembantu seperti {{#each}} akan membutuhkan penggunaan ../ sedangkan anak-anak pembantu seperti {{#if}} tidak.

{{permalink}}
{{#each comments}}
  {{../permalink}}

  {{#if title}}
    {{../permalink}}
  {{/if}}
{{/each}}

Dalam contoh ini semua referensi di atas nilai awalan yang sama meskipun mereka berada di dalam blok yang berbeda. Perilaku ini baru pada Setang 4, catatan rilis membahas perilaku sebelumnya serta rencana migrasi.

titoih
sumber