Pregunta

En mi Rieles de la plantilla, me gustaría lograr HTML final a este efecto mediante HAML:

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

La plantilla que viene a cerrar:

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

Usted puede, sin embargo, tenga en cuenta que esto produce un espacio entre el enlace y la coma.Es allí cualquier manera práctica para evitar este espacio en blanco?Sé que hay sintaxis para eliminar el espacio en blanco alrededor de las etiquetas, pero puede que esta misma sintaxis se aplica sólo texto?En realidad no me gusta la solución de extra marcado para ello.

¿Fue útil?

Solución

Una mejor manera de hacer esto ha sido introducido a través de Haml del ayudantes:

surround

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

éxito:

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

preceden:

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

Para responder a la pregunta original:

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

Otros consejos

También puede hacerlo usando el modificador "espacios en blanco ajuste" de Haml. Inserción > después de una declaración Haml evitará que los espacios en blanco que se agreguen a su alrededor:

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

Sin embargo, como se puede ver, el modificador > también pela el espacio en blanco en frente del enlace, eliminando el espacio deseado entre las palabras y el enlace. No he descubierto una forma bastante alrededor de este, sin embargo, excepto para añadir &nbsp; hasta el final de "lo haré primero", así:

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

Lo que finalmente se produce la salida deseada sin mucha difíciles de leer la interpolación:

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

Muy bien, aquí está la solución que estoy de colocar en:

helper

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

Ver

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 esta manera, los espacios en blanco se excluye de forma predeterminada, pero todavía puede incluir explícitamente con una línea "\ n". (Se necesita el doble barra invertida porque de lo contrario HAML lo interpreta como una nueva línea real.) Quiero saber si hay una opción mejor que hay!

Puede utilizar el 'sintaxis de cocodrilo' de HAML

  

Eliminación de espacios en blanco:> y <

     

y Eliminará todos los espacios en blanco que rodea una etiqueta, mientras que caras de la etiqueta y se come el espacio en blanco en el exterior, y

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

Una vez que el enfoque que he tomado a este tipo de cosas es utilizar la interpolación de cadenas:

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

No me gusta el aspecto de la cadena literal en la interpolación, pero lo he usado con cuerdas o cadenas declarados previamente generadas dinámicamente antes.

Esto se puede hacer para mantener el espacio inicial:

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

El espacio está en las cotizaciones.

Aunque no se ha documentado, esto se logra limpiamente usando preservación HAML espacios en blanco (>) combinado con un espacio ASCII (& # 32;), y no con ayudantes:

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

Esto producirá lo que quiere:

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

Pero estoy de acuerdo, HAML necesita para llegar a una mejor forma de hacer esto, ya que añadir caracteres ASCII innecesarios a la página (pero aún así es más eficiente que el uso de ayudantes).

Hay la sintaxis soporte angular "comiendo espacio en blanco", de lo contrario escribir un método de ayuda para ello.

Me encontré con un problema similar y encontré esto así que pensé que iba a publicar otra solución que no requiere un método de ayuda. Rubí utilizar la interpolación # {} para envolver el enlace y si las declaraciones:

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}

Esto funciona en 3.0.18, también puede funcionar en versiones anteriores.

Sin embargo, otra opción que he utilizado en el pasado:

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

También podría hacer siempre:

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

La solución que me de trabajo es:

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

Puede utilizar =, aunque = se utiliza para emitir el resultado de código de Rails, pero aquí será el propósito del servidor.

El preservar la función trabajó para mí

.white-space-pre= preserve "TEXT"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top