Baru saja datang ke pos ini dari pencarian google tentang cara memeriksa apakah string sama dengan string lain.
Saya menggunakan HandlebarsJS di sisi server NodeJS, tetapi saya juga menggunakan file template yang sama di front-end menggunakan versi browser HandlebarsJS untuk menguraikannya. Ini berarti bahwa jika saya menginginkan pembantu kustom, saya harus mendefinisikannya di 2 tempat terpisah, atau menetapkan fungsi ke objek yang dimaksud - terlalu banyak usaha !!
Apa yang dilupakan orang adalah bahwa objek tertentu memiliki fungsi bawaan yang dapat digunakan dalam templat kumis. Dalam hal string:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
An Array containing the entire match result and any parentheses-captured matched results; null if there were no matches.
Kami dapat menggunakan metode ini untuk mengembalikan susunan kecocokan, atau null
jika tidak ada kecocokan yang ditemukan. Ini sempurna, karena melihat dokumentasi HandlebarsJS http://handlebarsjs.com/builtin_helpers.html
You can use the if helper to conditionally render a block. If its argument returns false, undefined, null, "", 0, or [], Handlebars will not render the block.
Begitu...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
MEMPERBARUI:
Setelah menguji pada semua browser, ini tidak berfungsi pada Firefox . HandlebarsJS meneruskan argumen lain ke pemanggilan fungsi, yang berarti bahwa ketika String.prototype.match dipanggil, argumen kedua (yaitu flag Regexp untuk pemanggilan fungsi pencocokan sesuai dokumentasi di atas) tampaknya diteruskan. Firefox melihat ini sebagai penggunaan String.prototype.match, dan jadi rusak.
Solusinya adalah mendeklarasikan prototipe fungsional baru untuk objek String JS , dan gunakan itu sebagai gantinya:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Pastikan kode JS ini disertakan sebelum Anda menjalankan fungsi Handlebars.compile (), lalu di templat Anda ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}