Dans mon plugin, je souhaite avoir une instruction if dans un modèle, qui évalue si une chaîne correspond à une valeur.
Comme ceci :
{{#each groups as |group|}}
{{#if group.name === "AwesomeName"}}
<div>Il y a une correspondance !</div>
{{/if}}
{{/each}}
Comment puis-je faire cela dans Discourse ?
Je comprends qu’utiliser directement {{if}} ne fonctionne pas dans Ember/Handlebars. Il semble que je doive enregistrer un helper. Quelque chose comme ceci :
{{#each groups as |group|}}
{{#eq group.name "AwesomeName"}}
<div>Il y a une correspondance !</div>
{{/eq}}
{{/each}}
Cela ne fonctionne pas. (Aucune erreur n’est indiquée.)
J’ai essayé la solution ici, qui tente d’utiliser “makeBoundHelper”, mais cela ne fonctionne pas non plus pour moi — dans ce cas, j’obtiens des erreurs indiquant que “makeBoundHelper” n’est pas une fonction.
Je souhaite simplement pouvoir utiliser une instruction if pour comparer une chaîne à une valeur. Comment faire ?
Les propriétés calculées sont intéressantes, mais je ne vois pas le lien avec ce sur quoi je me concentre ici.
Dans mon exemple, la propriété clé est group.name, et je veux évaluer dans le modèle si cette propriété correspond à “AwesomeName”. Je ne suis pas sûr de la façon dont les propriétés calculées permettraient de contourner la nécessité d’utiliser un type particulier d’instruction {{if}} dans le modèle, ce que je n’ai pas encore réussi à déterminer.
Les modèles Handlebars ne disposent que d’une logique booléenne rudimentaire. Vous pouvez effectuer des vérifications sur la présence de valeurs truthy.
Pour des opérations plus complexes, vous devez implémenter la logique dans le fichier Ember JS associé au modèle.
Par exemple, si vous avez un modèle situé sous templates/components/my-component.hbs, vous devrez utiliser le fichier JS components/my-component.js pour effectuer le calcul.
Dans ce fichier, vous écririez quelque chose comme ceci :
Merci pour cela — cela aide à clarifier beaucoup de choses.
Je n’ai pas encore tout à fait réussi à faire fonctionner cela, en partie parce que je ne trouve pas d’exemples en ligne montrant l’utilisation de propriétés calculées pour ce type d’opération.
Dans mon cas, dans mon plugin, j’apporte la modification dans le modèle d’index des groupes. Donc dans le fichier : plugin/assets/javascripts/discourse/groups/index.hbs (j’y ai simplement placé tout le code de l’index des groupes et ajouté mes modifications par-dessus.)
Voulez-vous dire que le fichier JS contenant la propriété calculée devrait se trouver dans un fichier que je crée, à savoir : plugin/assets/javascripts/discourse/groups/index.js ? Ou puis-je simplement placer ce code dans un initialiseur ?
Voici ma meilleure tentative pour implémenter ce dont vous parlez — est-ce ce à quoi vous pensiez :
{{#if property}}
<div>Oui, il y a une correspondance !</div>
{{/if}}
Ou vouliez-vous dire que je devrais littéralement entrer des valeurs générales comme “string1” et “string2” dans @discourseComputed, puis modifier le modèle en {{#if property group.name "Amazing_Name"}} ? (Seule cette méthode me permettrait de prendre en compte chaque valeur dynamique dans le modèle.)
Je n’ai pas encore réussi à faire fonctionner l’une ou l’autre approche.
Avez-vous réussi à faire fonctionner cela ? J’aimerais beaucoup avoir un exemple détaillé expliquant comment procéder (quoi ajouter comme contenu, dans quel fichier, et à quel endroit dans ce fichier si cela est pertinent).
Je n’ai jamais réussi à faire fonctionner cela moi-même et j’ai dû passer à autre chose. Cela semblait absurde de passer autant de temps sur ce qui serait normalement un exercice de codage de base. Dans mon cas, je pense qu’il s’agissait probablement d’une petite erreur de syntaxie ici et d’une autre là, mais je n’ai jamais trouvé d’exemples complets et fonctionnels. Je serais également reconnaissant de recevoir un exemple complet et fonctionnel montrant comment faire un if string === string.