Je viens de venir à ce poste à partir d'une recherche Google sur la façon de vérifier si une chaîne est égale à une autre chaîne.
J'utilise HandlebarsJS dans NodeJS côté serveur, mais j'utilise également les mêmes fichiers de modèle sur le front-end en utilisant la version navigateur de HandlebarsJS pour l'analyser. Cela signifiait que si je voulais un assistant personnalisé, je devrais le définir à 2 endroits différents, ou affecter une fonction à l'objet en question - trop d'effort !!
Ce que les gens oublient, c'est que certains objets ont des fonctions héritées qui peuvent être utilisées dans le modèle de moustache. Dans le cas d'une chaîne:
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.
Nous pouvons utiliser cette méthode pour renvoyer soit un tableau de correspondances, soit null
si aucune correspondance n'a été trouvée. C'est parfait, car en consultant la documentation 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.
Donc...
{{#if your_string.match "what_youre_looking_for"}}
String found :)
{{else}}
No match found :(
{{/if}}
MISE À JOUR:
Après avoir testé sur tous les navigateurs, cela ne fonctionne pas sur Firefox . HandlebarsJS transmet d'autres arguments à un appel de fonction, ce qui signifie que lorsque String.prototype.match est appelé, le deuxième argument (c'est-à-dire les indicateurs Regexp pour l'appel de fonction de correspondance selon la documentation ci-dessus) semble être passé. Firefox voit cela comme une utilisation obsolète de String.prototype.match, et se brise donc.
Une solution consiste à déclarer un nouveau prototype fonctionnel pour l'objet String JS et à l'utiliser à la place:
if(typeof String.includes !== 'function') {
String.prototype.includes = function(str) {
if(!(str instanceof RegExp))
str = new RegExp((str+'').escapeRegExp(),'g');
return str.test(this);
}
}
Assurez-vous que ce code JS est inclus avant d'exécuter votre fonction Handlebars.compile (), puis dans votre modèle ...
{{#your_string}}
{{#if (includes "what_youre_looking_for")}}
String found :)
{{else}}
No match found :(
{{/if}}
{{/your_string}}