Właśnie przyszedł do tego postu z wyszukiwarki Google, w jaki sposób sprawdzić, czy ciąg znaków jest równy innym ciągom znaków.
Korzystam z HandlebarsJS po stronie serwera NodeJS, ale używam również tych samych plików szablonów w interfejsie, używając wersji HandlebarsJS w przeglądarce do parsowania. Oznaczało to, że gdybym chciał niestandardowego pomocnika, musiałbym zdefiniować go w 2 oddzielnych miejscach lub przypisać funkcję do przedmiotowego obiektu - zbyt duży wysiłek !!
Ludzie zapominają o tym, że niektóre obiekty mają funkcje dziedziczenia, których można używać w szablonie wąsów. W przypadku ciągu:
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.
Możemy użyć tej metody, aby zwrócić tablicę dopasowań lub null
jeśli nie znaleziono żadnych dopasowań. Jest to idealne, ponieważ przeglądanie dokumentacji 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.
Więc...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
AKTUALIZACJA:
Po przetestowaniu we wszystkich przeglądarkach nie działa to w przeglądarce Firefox . HandlebarsJS przekazuje inne argumenty do wywołania funkcji, co oznacza, że po wywołaniu String.prototype.match drugi argument (tj. Flagi Regexp dla wywołania funkcji dopasowania zgodnie z powyższą dokumentacją) wydaje się być przekazywany. Firefox postrzega to jako przestarzałe użycie String.prototype.match i dlatego się psuje.
Obejściem tego problemu jest zadeklarowanie nowego funkcjonalnego prototypu dla obiektu String JS i użycie go zamiast tego:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Upewnij się, że ten kod JS jest uwzględniony przed uruchomieniem funkcji Handlebars.compile (), a następnie w szablonie ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}