Frage

In meiner Rails-template, ich würde wie zu erreichen die endgültige HTML-dieser Effekt mit HAML:

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

Die Vorlage sehr nahe kommt:

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

Sie können aber beachten Sie, dass dies erzeugt einen Raum zwischen dem link und dem Komma.Gibt es irgendwelche praktischen Weg, um dies zu vermeiden whitespace?Ich weiß, dass es eine syntax, um entfernen Sie Leerzeichen um tags, aber kann das gleiche syntax angewendet werden, um nur text?Ich weiß wirklich nicht, wie die Lösung der zusätzliche markup, um dies zu erreichen.

War es hilfreich?

Lösung

Ein besserer Weg, dies zu tun, wurde eingeführt, über Haml ' s Helfer:

surround

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

gelingen:

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

vorausgehen:

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

Die Antwort auf die ursprüngliche Frage:

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

Andere Tipps

Sie können auch tun dies Haml des „Trimm Leerzeichen“ Modifier. Einfügen > nach einer Haml Erklärung wird verhindert, dass Leerzeichen aus der Umgebung hinzugefügt werden:

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

erzeugt:

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

Doch wie Sie sehen können, streift der > Modifikator auch die Leerzeichen vor dem Link, um den gewünschten Abstand zwischen den Worten und dem Link zu entfernen. Ich habe nicht eine hübsche Weise, um diese noch dachte, mit der Ausnahme &nbsp; bis Ende hinzuzufügen: „Ich will zuerst“, etwa so:

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

, die schließlich die gewünschte Ausgabe ohne viele schwer zu lesen Interpolation erzeugt:

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

In Ordnung, hier ist die Lösung, die ich bin Absetzen auf:

Helper

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

Ansicht

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

Auf diese Weise wird Leerzeichen standardmäßig ausgeschlossen, aber ich kann es immer noch explizit enthalten mit einem „\ n“ -Zeile. (Es braucht die zwei Backslash weil sonst interpretiert HAML es als eigentliches Newline.) Lassen Sie mich wissen, ob es eine bessere Option ist da draußen!

Sie können mit der 'Aligator Syntax' von HAML

  

Leerzeichen entfernen:> und <

     

und Werden alle Leerzeichen ein Tag umgibt, entfernen, während Gesichter aus dem Tag und isst die Leerzeichen auf der Außenseite und

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

Sobald Ansatz, den ich auf diese Art der Sache genommen habe, ist String-Interpolation verwendet werden:

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

Ich mag es nicht das Aussehen der Zeichenkette in der Interpolation, aber ich habe es mit zuvor deklarierten Strings oder dynamisch generierte Zeichenfolge vor.

Sie können dies tun, das führende Leerzeichen zu halten:

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

Der Raum ist in Anführungszeichen.

Obwohl es nicht gut dokumentiert, diese sauber erreicht HAML Leerzeichen Pflege mit (>) mit einem ASCII-Raum kombiniert (& # 32;) und nicht mit Helfern:

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

Dies wird produzieren, was Sie wollen:

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

Aber ich stimme, HAML mit einem besseren Weg zu kommen braucht, dies zu tun, da es auf der Seite unnötigen ASCII-Zeichen hinzuzufügt (aber es ist immer noch effizienter als die Verwendung Helfer).

Es ist die spitze Klammer „Leerzeichen munching“ Syntax, sonst eine Hilfsmethode für sie schreiben.

stieß ich auf ein ähnliches Problem und fand dies so dachte ich, ich würde eine andere Lösung veröffentlichen, die keine Hilfsmethode erfordert. Verwenden Sie Ruby-Interpolation # {}, um den Link zu wickeln und if-Anweisungen:

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}

Das funktioniert in 3.0.18, kann es auch in früheren Versionen arbeiten.

Eine weitere Option, die ich in der Vergangenheit verwendet haben:

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

Sie können auch immer tun:

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

Die Lösung, die ich habe Arbeit ist:

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

Sie können = verwenden, obwohl = das Ergebnis der Rails-Code-Ausgang verwendet wird, aber hier wird es Server der Zweck.

Die erhalten Funktion für mich gearbeitet

.white-space-pre= preserve "TEXT"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top