Handlebars.js: Tetapkan variabel dalam template

Dibuat pada 29 Mar 2013  ·  11Komentar  ·  Sumber: handlebars-lang/handlebars.js

Apakah mungkin untuk menetapkan variabel di dalam templat dan menggunakannya seperti variabel dari luar?

Contoh:
Saya ingin menampilkan tabel, tetapi 1 kolom adalah opsional, tergantung pada data (bidang[].bidang2) ada atau tidak.

Di setiap baris tidak ada masalah untuk memeriksa, tetapi bagaimana cara memeriksanya untuk header ?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

Saat ini saya menggunakan fungsi pembantu yang tidak stabil "menetapkan" yang membuat pembantu.

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

Tapi itu bukan solusi yang baik dan saya tidak bisa menggunakannya di #if.

Komentar yang paling membantu

:+1:

@kpdecker Kita dapat memiliki loop, pernyataan if, dan sejumlah konstruksi logika lainnya dalam template. Tetapi ternyata menetapkan variabel adalah _terlalu banyak logika dalam templat? Saya benar-benar tidak mengerti alasan di balik keputusan itu ketika pembantu default lainnya mengandung lebih banyak logika daripada sekadar memiliki kemampuan untuk menetapkan variabel.

Semua 11 komentar

Ini bertentangan dengan premis templat tanpa logika dan saya tidak berpikir bahwa ini harus berupa konstruksi tingkat bahasa.

Saya pikir pendekatan yang disarankan di sini adalah menghitung data ini dalam logika pembuatan konteks Anda dan meneruskannya ke dalam template. Ini memungkinkan lebih banyak kontrol karena Anda memiliki bahasa javascript lengkap yang Anda inginkan daripada subset apa pun yang diimplementasikan dalam bahasa template.

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

Saya pikir ini akan menjadi fitur yang bagus, bukan untuk memperkenalkan lebih banyak logika ke templat, tetapi untuk meneruskan variabel yang khusus untuk templat itu.

Misalnya, 2 templat saya menggunakan parsial yang sama. Saya ingin dapat meneruskan beberapa variabel ke parsial itu dari tingkat templat sehingga hal-hal yang berbeda adalah keluaran untuk templat yang berbeda dalam lingkup parsial.

+1

+1

:+1:

:+1:

@kpdecker Kita dapat memiliki loop, pernyataan if, dan sejumlah konstruksi logika lainnya dalam template. Tetapi ternyata menetapkan variabel adalah _terlalu banyak logika dalam templat? Saya benar-benar tidak mengerti alasan di balik keputusan itu ketika pembantu default lainnya mengandung lebih banyak logika daripada sekadar memiliki kemampuan untuk menetapkan variabel.

+1

+1

+1

+1

Sesuatu di sepanjang baris ini dapat diimplementasikan menggunakan parameter blok dan didokumentasikan di sini:
http://handbarsjs.com/block_helpers.html#block -params

Karena ini dilakukan dalam namespace terpisah di luar konteks saat ini, ini memberikan perilaku yang lebih konsisten dibandingkan penetapan konteks.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat