Domanda

Nel mio Rotaie modello, mi piacerebbe realizzare codice HTML finale a questo effetto utilizzando HAML:

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

Il modello che si avvicina:

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

Si può, comunque, è da notare che questo produce uno spazio tra il link e la virgola.C'è un modo pratico per evitare questo spazio?So che c'è la sintassi per rimuovere lo spazio vuoto intorno al tag, ma questa stessa sintassi essere applicato solo testo?Non mi piace la soluzione di extra markup per realizzare questo.

È stato utile?

Soluzione

Un modo migliore per fare questo è stato introdotto per via Haml assistenti:

surround

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

successo:

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

precedere:

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

Per rispondere alla domanda originale:

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
Produce:
I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met

Altri suggerimenti

È anche possibile farlo usando il modificatore "assetto spazi" di Haml. Inserimento > dopo una dichiarazione Haml impedirà gli spazi vengano aggiunti attorno ad esso:

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

produce:

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

Tuttavia, come si può vedere, il modificatore > strisce anche gli spazi di fronte del collegamento, eliminando lo spazio desiderato tra le parole e il collegamento. Io non ho ancora capito un modo piuttosto intorno a questo, tranne che per aggiungere &nbsp; alla fine della "Lo farò prima", in questo modo:

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

che alla fine produce il risultato desiderato, senza un sacco di interpolazione difficile da leggere:

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

Bene, ecco la soluzione che sto stabilirsi su:

Helper

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

Visualizza

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

In questo modo, gli spazi bianchi è esclusa per impostazione predefinita, ma può ancora includere esplicitamente con una linea "\ n". (Ha bisogno del doppio backslash perché altrimenti HAML lo interpreta come un ritorno a capo vero e proprio.) Fammi sapere se c'è una soluzione migliore là fuori!

È possibile utilizzare la 'sintassi di aligator' di HAML

  

La rimozione Spazio bianco:> e <

     

e Rimuoverà tutti spazi che lo circondano un tag, mentre affaccia del tag e mangia gli spazi al di fuori, e

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

Una volta che l'approccio che ho preso a questo genere di cose è quello di utilizzare l'interpolazione stringa:

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

Non mi piace l'aspetto della stringa letterale nella interpolazione, ma ho usato con le stringhe in precedenza dichiarati o stringhe generate dinamicamente prima.

Si può fare questo per mantenere lo spazio iniziale:

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

Lo spazio è nelle citazioni.

Anche se non è ben documentato, questo è realizzato in modo pulito utilizzando conservazione HAML spazi bianchi (>) in combinazione con uno spazio ASCII (& # 32;), e non con aiutanti:

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

Questo produrrà ciò che si vuole:

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

Ma sono d'accordo, HAML ha bisogno di trovare un modo migliore di fare questo, come lo fa aggiungere caratteri ASCII non necessari alla pagina (ma è ancora più efficiente rispetto all'utilizzo di aiutanti).

C'è la parentesi angolare sintassi "spazio bianco sgranocchiare", altrimenti scrivere un metodo di supporto per esso.

Mi sono imbattuto in un problema simile e trovato questo così ho pensato di postare un'altra soluzione che non richiede un metodo di supporto. Utilizzare Rubino interpolazione # {} per avvolgere il collegamento e se le dichiarazioni:

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}

Questo funziona in 3.0.18, può funzionare anche nelle versioni precedenti.

Ancora un'altra opzione che ho usato in passato:

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

Si potrebbe anche fare sempre:

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

La soluzione che ho avuto di lavoro è:

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

È possibile utilizzare =, anche se = viene utilizzato per emettere il risultato del codice di Rails, ma qui sarà del server allo scopo.

Il preservare funzione ha lavorato per me

.white-space-pre= preserve "TEXT"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top