Perbedaan utama yang saya lihat adalah:
- Setang menambahkan
#if
,#unless
,#with
, dan#each
- Setang menambah pembantu
- Templat templat dikompilasi (Bisa juga kumis)
- Setang mendukung jalur
- Mengizinkan penggunaan
{{this}}
dalam blok (yang menampilkan nilai string item saat ini) Handlebars.SafeString()
(dan mungkin beberapa metode lain)- Setang 2 hingga 7 kali lebih cepat
- Kumis mendukung bagian terbalik (yaitu
if !x ...
)
(Tolong koreksi saya jika saya salah dengan yang di atas.)
Apakah ada perbedaan besar lainnya yang saya lewatkan?
handlebars.js
mustache
client-side-templating
templating-engine
Chad Johnson
sumber
sumber
Jawaban:
Anda sudah cukup banyak memakukannya, namun template Moustache juga dapat dikompilasi.
Moustache adalah pembantu yang hilang dan blok yang lebih maju karena berusaha keras untuk menjadi tidak logis. Pembantu khusus setang bisa sangat berguna, tetapi seringkali berakhir dengan memasukkan logika ke dalam templat Anda.
Moustache memiliki banyak kompiler berbeda (JavaScript, Ruby, Python, C, dll.). Setang dimulai pada JavaScript, sekarang ada proyek-proyek seperti Django-setang , handlebars.java , setang-ruby , lightncandy (PHP) , dan setang-ObjC .
sumber
Pro kumis:
Kontra kumis:
Pro setang:
Kontra setang:
Sumber: Pelemparan templating sisi-klien: kumis, setang, dust.js, dan banyak lagi
sumber
tr:nth-child(even)
dantr:nth-child(odd)
atautr:nth-child(2n)
. Meskipun itu hanya sebuah contoh, saya merasa bahwa (sebagian besar waktu) jika ada sesuatu yang sulit atau canggung dengan Kumis, maka Anda salah melakukannya; ada tempat yang lebih baik untuk itu.Satu perbedaan kecil tapi signifikan adalah dalam cara kedua perpustakaan mendekati ruang lingkup. Kumis akan kembali ke lingkup induk jika tidak dapat menemukan variabel dalam konteks saat ini; Setang akan mengembalikan string kosong.
Ini hampir tidak disebutkan dalam GitHub README, di mana ada satu baris untuk itu:
Namun, seperti disebutkan di sana, ada bendera untuk membuat Setang berperilaku dengan cara yang sama seperti Kumis - tetapi itu mempengaruhi kinerja.
Ini memiliki efek pada cara Anda dapat menggunakan
#
variabel sebagai kondisional.Misalnya di Kumis Anda dapat melakukan ini:
Ini pada dasarnya berarti "jika variabel ada dan benar, cetak rentang dengan variabel di dalamnya". Namun di Handlebars, Anda harus:
{{this}}
saja{{../variable}}
untuk kembali ke lingkup yang relevanvariable
nilai anak dalamvariable
objek indukLebih detail tentang ini, jika Anda menginginkannya, di sini .
sumber
CATATAN: Jawaban ini sudah usang. Memang benar pada saat itu diposting, tetapi tidak lagi.
Moustache memiliki juru bahasa dalam banyak bahasa, sedangkan Handlebars hanya Javascript.
sumber
Perbedaan lain di antara mereka adalah ukuran file:
Untuk melihat manfaat kinerja Handlebars.js, kita harus menggunakan templat yang dikompilasi sebelumnya.
Sumber: Ikhtisar Mesin Templating JavaScript
sumber
Satu perbedaan yang lebih halus adalah perlakuan nilai-nilai palsu dalam
{{#property}}...{{/property}}
blok. Sebagian besar implementasi kumis hanya akan mematuhi JS falsiness di sini, tidak merender blok jikaproperty
ada''
atau '0'.Setang akan membuat blok untuk
''
dan0
, tetapi bukan nilai-nilai palsu lainnya. Ini dapat menyebabkan beberapa masalah saat memigrasi template.sumber
Saya merasa bahwa salah satu kontra yang disebutkan untuk "Setang" tidak benar-benar berlaku lagi.
Handlebars.java sekarang memungkinkan kami untuk berbagi bahasa templat yang sama untuk klien dan server yang merupakan kemenangan besar untuk proyek besar dengan 1000+ komponen yang memerlukan rendering sisi server untuk SEO
Lihatlah https://github.com/jknack/handlebars.java
sumber
—Selain menggunakan "ini" untuk setang, dan variabel bersarang di dalam blok variabel untuk kumis, Anda juga dapat menggunakan titik bersarang di blok untuk kumis:
sumber