Question

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 s'en 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 remarquerez cependant que cela produit un espace entre le lien et la virgule.Existe-t-il un moyen pratique d'éviter cet espace ?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 du balisage supplémentaire pour y parvenir.

Était-ce utile?

La solution

Une meilleure façon de procéder a été introduite via les assistants de Haml :

entourer

= surround '(', ')' do
  %a{:href => "food"} chicken
Produit :
(<a href='food'>chicken</a>)

réussir:

click
= succeed '.' do
  %a{:href=>"thing"} here
Produit :
click
<a href='thing'>here</a>.

précéder:

= precede '*' do
  %span.small Not really
Produit :
*<span class='small'>Not really</span>

Pour répondre à la question initiale :

I will first
= succeed ',' do
  = link_to 'link somewhere', 'http://example.com'
- if @condition
  then render this half of the sentence if a condition is met
Produit :
I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met

Autres conseils

Vous pouvez aussi le faire en utilisant le modificateur « trim des espaces » de Haml. L'insertion > après une déclaration Haml empêchera les espaces d'être ajouté autour:

I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

produit:

I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met

Cependant, comme vous pouvez le voir, le modificateur de > bandes aussi les espaces blancs devant le lien, en supprimant l'espace désiré entre les mots et le lien. Je n'ai pas trouvé une jolie façon de contourner ce encore, à l'exception d'ajouter &nbsp; à la fin de « Je vais d'abord », comme suit:

I will first&nbsp;
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

Ce qui produit finalement la sortie désirée sans beaucoup d'interpolation difficile à lire:

I will first&nbsp;<span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met

D'accord, voici la solution que je me installe sur:

Aide

def one_line(&block)
  haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")
end

Voir

I will first
- one_line do
  = link_to 'link somewhere', 'http://example.com'
  - if @condition
    , then render this half of the sentence
    \\n
    if a condition is met

De cette façon, les espaces sont exclus par défaut, mais je ne peux toujours inclure explicitement avec une ligne « \ n ». (Il a besoin de la double barre oblique inverse car sinon HAML l'interprète comme un saut de ligne réelle.) Permettez-moi de savoir s'il y a une meilleure option là-bas!

Vous pouvez utiliser la 'syntaxe Aligator' de HAML

  

Suppression Whitespace:> et <

     

et Supprimera tous les espaces autour d'une étiquette, alors que fait face sur l'étiquette et mange les espaces blancs à l'extérieur, et

http://haml.info/docs/yardoc/file.REFERENCE. html # whitespace_removal__and_

Une fois l'approche que j'ai pris à ce genre de chose est d'utiliser l'interpolation de chaîne:

I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}

Je n'aime pas le look de la chaîne littérale dans l'interpolation, mais je l'ai utilisé avec des chaînes ou des chaînes générées dynamiquement précédemment déclarées avant.

Vous pouvez faire cela pour garder l'espace principal:

%a{:href => 'http://example.com'}>= ' link somewhere'

L'espace est dans les guillemets.

Bien que pas bien documenté, cela est proprement réalisé en utilisant la préservation des espaces HAML (>) associé à un espace ASCII (& # 32;), et non avec des aides:

%a{:href=>'/home'}> Home link
,&#32; 
%a{:href=>'/page'} Next link

Cela produira ce que vous voulez:

<a href='/home'>Anchor text</a>,&#32;
<a href='/page'>More text</a>

Mais je suis d'accord, HAML a besoin de trouver une meilleure façon de le faire, car il n'ajoute des caractères ASCII inutiles à la page (mais il est encore plus efficace que l'utilisation des aides).

Il y a l'équerre syntaxe « espaces blancs grignotant », sinon écrire une méthode d'assistance pour elle.

Je suis tombé sur un problème similaire et trouvé ce donc je pensais que je posterais une autre solution qui ne nécessite pas une méthode d'assistance. Utilisez Ruby interpolation # {} pour envelopper le lien et si les déclarations:

I will first 
#{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}

Cela fonctionne en 3.0.18, il peut également fonctionner dans les versions antérieures.

Une autre option que je l'ai utilisé dans le passé:

- if @condition
  %span> , then some more text after the link.

Vous pouvez aussi toujours faire:

= link_to url_path do 
  = ["part_1", "part_2"].join(", ")

La solution que je suis de travail est:

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 utiliser =, bien que = est utilisé pour produire le résultat d'un code Rails, mais ici, ce sera dans le but serveur.

Le préserver fonction a fonctionné pour moi

.white-space-pre= preserve "TEXT"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top