Dans mon modèle Rails, j'aimerais réaliser le HTML final à cet effet en utilisant HAML:
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
Le modèle qui se rapproche:
I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
, then render this half of the sentence if a condition is met
Vous pouvez cependant noter que cela produit un espace entre le lien et la virgule. Existe-t-il un moyen pratique d'éviter ces espaces? Je sais qu'il existe une syntaxe pour supprimer les espaces autour des balises, mais cette même syntaxe peut-elle être appliquée uniquement au texte? Je n'aime vraiment pas la solution de balisage supplémentaire pour accomplir cela.
ruby-on-rails
haml
Matchu
la source
la source
succeed
spécifiquement)? Pour moi, cela semble toujours non évident et un peu moche: gist.github.com/1665374@condition == false
, ce qui est plus laid que l'espace avant cette virgule.Vous pouvez également le faire en utilisant le modificateur "Trim whitespace" de Haml. L'insertion
>
après une déclaration Haml empêchera l'ajout d'espaces blancs autour d'elle:produit:
Cependant, comme vous pouvez le voir, le
>
modificateur supprime également l'espace blanc devant le lien, supprimant l'espace souhaité entre les mots et le lien. Je n'ai pas encore trouvé de moyen de contourner ce problème, sauf pour ajouter
à la fin de "Je vais d'abord", comme ceci:Ce qui produit finalement la sortie souhaitée sans beaucoup d'interpolation difficile à lire:
la source
a une signification particulière, ce n'est pas un espace blanc ordinaire - c'est un espace blanc insécable, ce qui signifie que pendant le retour à la ligne, le navigateur ferait tout pour garder les mots liés
ensemble et ce n'est pas toujours ce que vous voulez. 
plutôt que
pour un simple espace blanc.D'accord, voici la solution sur laquelle je m'installe:
Assistant
Vue
De cette façon, les espaces sont exclus par défaut, mais je peux toujours les inclure explicitement avec une ligne "\ n". (Il a besoin de la double barre oblique inverse, car sinon HAML l'interprète comme une nouvelle ligne réelle.) Faites-moi savoir s'il existe une meilleure option!
la source
Vous pouvez utiliser la 'syntaxe d'aligator' de HAML
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
la source
Une fois l'approche que j'ai adoptée pour ce genre de chose est d'utiliser l'interpolation de chaîne:
Je n'aime pas l'apparence de la chaîne littérale dans l'interpolation, mais je l'ai déjà utilisée avec des chaînes précédemment déclarées ou des chaînes générées dynamiquement.
la source
Vous pouvez le faire pour conserver l'espace principal:
L'espace est entre guillemets.
la source
Bien que cela ne soit pas bien documenté, cela est réalisé proprement en utilisant la préservation des espaces blancs HAML (>) combinée à un espace ASCII (& # 32;), et non avec des helpers:
Cela produira ce que vous voulez:
Mais je suis d'accord, HAML doit trouver une meilleure façon de faire cela, car il ajoute des caractères ASCII inutiles à la page (mais c'est toujours plus efficace que d'utiliser des helpers).
la source
Il y a la syntaxe "grignotage d'espaces" entre crochets angulaires, sinon écrivez une méthode d'aide pour cela.
la source
Je suis tombé sur un problème similaire et j'ai trouvé cela, alors j'ai pensé publier une autre solution qui ne nécessite pas de méthode d'aide. Utilisez l'interpolation Ruby # {} pour envelopper le lien et les instructions if:
Cela fonctionne dans la version 3.0.18, cela peut également fonctionner dans les versions antérieures.
la source
.haml
fichier complet - le fait qu'il inclue un lien et une virgule n'indique vraiment rien de toute façon.Encore une autre option que j'ai utilisée dans le passé:
la source
Vous pouvez également toujours faire:
la source
La solution que j'ai obtenue est:
Vous pouvez utiliser
=
, bien qu'il=
soit utilisé pour afficher le résultat du code Rails, mais ici, il servira le but.la source
La fonction de conservation a fonctionné pour moi
.white-space-pre= preserve "TEXT"
la source