Di template Rails saya, saya ingin menyelesaikan HTML akhir untuk efek ini menggunakan HAML:
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
Template yang mendekati:
I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
, then render this half of the sentence if a condition is met
Namun, Anda dapat mencatat bahwa ini menghasilkan spasi antara tautan dan koma. Apakah ada cara praktis untuk menghindari whitespace ini? Saya tahu ada sintaks untuk menghapus spasi di sekitar tag, tetapi dapatkah sintaks yang sama ini diterapkan hanya pada teks? Saya benar-benar tidak suka solusi markup ekstra untuk mencapai ini.
ruby-on-rails
haml
Matchu
sumber
sumber
succeed
secara khusus)? Bagi saya ini masih tampak tidak jelas dan sedikit jelek: gist.github.com/1665374@condition == false
, yang lebih jelek daripada spasi sebelum koma ini.Anda juga dapat melakukan ini menggunakan pengubah "trim whitespace" Haml. Memasukkan
>
setelah deklarasi Haml akan mencegah penambahan spasi di sekitarnya:menghasilkan:
Namun, seperti yang Anda lihat,
>
pengubah juga menghapus spasi di depan tautan, menghapus spasi yang diinginkan antara kata dan tautan. Saya belum menemukan cara yang bagus untuk menyiasatinya, kecuali untuk menambahkan
di akhir "Saya akan dulu", seperti ini:Yang akhirnya menghasilkan keluaran yang diinginkan tanpa banyak interpolasi yang sulit dibaca:
sumber
memiliki arti khusus untuk itu, ini bukan whitespace biasa - ini adalah whitespace non-breaking, yang berarti bahwa selama word-wrapping browser akan melakukan segalanya untuk menjaga kata-kata tetap terikat
dan ini tidak selalu yang Anda inginkan. 
sebagai pengganti
spasi kosong biasa.Baiklah, inilah solusi yang saya selesaikan:
Pembantu
Melihat
Dengan cara itu, spasi kosong dikecualikan secara default, tetapi saya masih bisa secara eksplisit memasukkannya dengan baris "\ n". (Perlu garis miring terbalik ganda karena jika tidak, HAML menafsirkannya sebagai baris baru yang sebenarnya.) Beri tahu saya jika ada opsi yang lebih baik di luar sana!
sumber
Anda dapat menggunakan 'sintaks aligator' dari HAML
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
sumber
Setelah pendekatan yang saya lakukan untuk hal semacam ini adalah dengan menggunakan interpolasi string:
Saya tidak suka tampilan string literal dalam interpolasi, tetapi saya telah menggunakannya dengan string yang dinyatakan sebelumnya atau string yang dibuat secara dinamis sebelumnya.
sumber
Anda dapat melakukan ini untuk menjaga ruang terdepan:
Spasi ada di tanda kutip.
sumber
Meskipun tidak terdokumentasi dengan baik, ini dicapai dengan rapi menggunakan pelestarian spasi putih HAML (>) yang dikombinasikan dengan ruang ASCII (& # 32;), dan tidak dengan pembantu:
Ini akan menghasilkan apa yang Anda inginkan:
Tapi saya setuju, HAML perlu menemukan cara yang lebih baik untuk melakukan ini, karena ia menambahkan karakter ASCII yang tidak perlu ke halaman (tetapi masih lebih efisien daripada menggunakan pembantu).
sumber
Ada sintaks "whitespace munching" braket sudut, jika tidak, tulis metode pembantu untuk itu.
sumber
Saya menemukan masalah serupa dan menemukan ini jadi saya pikir saya akan memposting solusi lain yang tidak memerlukan metode penolong. Gunakan interpolasi Ruby # {} untuk menggabungkan tautan dan pernyataan if:
Ini berfungsi di 3.0.18, ini juga dapat berfungsi di rilis sebelumnya.
sumber
.haml
file lengkap - fakta bahwa itu menyertakan tautan dan koma tidak benar-benar menunjukkan apa pun.Namun opsi lain yang saya gunakan di masa lalu:
sumber
Anda juga selalu bisa melakukan:
sumber
Solusi yang saya dapatkan adalah:
Anda dapat menggunakan
=
, meskipun=
digunakan untuk menampilkan hasil dari kode Rails, tetapi di sini akan menjadi server tujuan.sumber
Fungsi pelestarian berhasil untuk saya
.white-space-pre= preserve "TEXT"
sumber