Просто пришел на этот пост от Google поиск по как проверить, равна ли строка другой строке.
Я использую HandlebarsJS на стороне сервера NodeJS, но я также использую те же файлы шаблонов в интерфейсе, используя версию браузера HandlebarsJS для его синтаксического анализа. Это означало, что если бы мне нужен пользовательский помощник, я должен был бы определить его в двух отдельных местах или назначить функцию рассматриваемому объекту - слишком много усилий!
Что люди забывают, что некоторые объекты наследуют функции, которые можно использовать в шаблоне усов. В случае строки:
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.
Мы можем использовать этот метод, чтобы вернуть либо массив совпадений, или null
, если не было найдено ни одного совпадения. Это идеальный вариант, потому что, глядя на документацию 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.
Итак ...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
UPDATE:
После тестирования на всех браузерах, это не работайте над Firefox. HandlebarsJS передает другие аргументы вызову функции, что означает, что при вызове String.prototype.match второй аргумент (т.флаги Regexp для вызова функции соответствия в соответствии с приведенной выше документацией), по-видимому, передается. Firefox считает это устаревшим использованием String.prototype.match, и поэтому он прерывается.
Обойти это объявить новый функциональный прототип объекта Строка JS, и использовать его вместо:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Обеспечить этот JS код включен перед тем запустить ваш Handlebars.compile() функция, то в шаблоне ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}
Отлично, спасибо за это! – colmulhall