In meiner Rails-Vorlage möchte ich mit HAML den endgültigen HTML-Code zu diesem Zweck erstellen:
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, die 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 jedoch feststellen, dass dadurch ein Leerzeichen zwischen dem Link und dem Komma entsteht. Gibt es eine praktische Möglichkeit, dieses Leerzeichen zu vermeiden? Ich weiß, dass es eine Syntax zum Entfernen von Leerzeichen um Tags gibt, aber kann dieselbe Syntax nur auf Text angewendet werden? Ich mag die Lösung von zusätzlichem Markup wirklich nicht, um dies zu erreichen.
ruby-on-rails
haml
Matchu
quelle
quelle
succeed
speziell)? Für mich scheint es immer noch nicht offensichtlich und ein wenig hässlich: gist.github.com/1665374@condition == false
, was hässlicher ist als Leerzeichen vor diesem Komma.Sie können dies auch mit Hamls Modifikator "Trim Whitespace" tun. Durch das Einfügen
>
nach einer Haml-Deklaration wird verhindert, dass Leerzeichen hinzugefügt werden:produziert:
Wie Sie jedoch sehen können, entfernt der
>
Modifikator auch das Leerzeichen vor dem Link und entfernt den gewünschten Abstand zwischen den Wörtern und dem Link. Ich habe noch keinen schönen Weg gefunden, außer
am Ende von "Ich werde zuerst" Folgendes hinzuzufügen :Was schließlich die gewünschte Ausgabe ohne viel schwer lesbare Interpolation erzeugt:
quelle
dies eine besondere Bedeutung hat, es ist kein gewöhnliches Leerzeichen - es ist ein nicht unterbrechendes Leerzeichen, was bedeutet, dass der Browser während des Zeilenumbruchs alles tut, um Wörter
zusammenzuhalten, und dies ist nicht immer das, was Sie wollen. 
anstelle von
nur ein einfaches Leerzeichen.Okay, hier ist die Lösung, auf die ich mich einlasse:
Helfer
Aussicht
Auf diese Weise wird Leerzeichen standardmäßig ausgeschlossen, aber ich kann es trotzdem explizit in eine "\ n" -Zeile einfügen. (Es benötigt den doppelten Backslash, da HAML ihn ansonsten als tatsächlichen Zeilenumbruch interpretiert.) Lassen Sie mich wissen, ob es eine bessere Option gibt!
quelle
Sie können die 'Aligator-Syntax' von HAML verwenden
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
quelle
Ein Ansatz, den ich für diese Art von Dingen gewählt habe, ist die Verwendung der Zeichenfolgeninterpolation:
Ich mag das Aussehen der Literalzeichenfolge in der Interpolation nicht, aber ich habe es zuvor mit zuvor deklarierten Zeichenfolgen oder dynamisch generierten Zeichenfolgen verwendet.
quelle
Sie können dies tun, um den führenden Platz zu behalten:
Das Leerzeichen steht in Anführungszeichen.
quelle
Obwohl dies nicht gut dokumentiert ist, wird dies mithilfe der HAML-Leerzeichenerhaltung (>) in Kombination mit einem ASCII-Leerzeichen (& # 32;) und nicht mithilfe von Helfern sauber erreicht:
Dies wird produzieren, was Sie wollen:
Aber ich stimme zu, HAML muss einen besseren Weg finden, um dies zu tun, da es der Seite unnötige ASCII-Zeichen hinzufügt (aber es ist immer noch effizienter als die Verwendung von Helfern).
quelle
Es gibt die spitze Klammer "Whitespace Munching" -Syntax, andernfalls schreiben Sie eine Hilfsmethode dafür.
quelle
Ich bin auf ein ähnliches Problem gestoßen und habe es gefunden. Deshalb dachte ich, ich würde eine andere Lösung veröffentlichen, für die keine Hilfsmethode erforderlich ist. Verwenden Sie die Ruby-Interpolation # {}, um den Link und die if-Anweisungen zu verpacken:
Dies funktioniert in 3.0.18, möglicherweise auch in früheren Versionen.
quelle
.haml
Datei - die Tatsache, dass es einen Link und ein Komma enthält, zeigt in keiner Weise etwas an.Noch eine Option, die ich in der Vergangenheit verwendet habe:
quelle
Sie könnten auch immer tun:
quelle
Die Lösung, die ich zum Arbeiten gebracht habe, ist:
Sie können verwenden
=
,=
wird verwendet, um das Ergebnis des Rails-Codes auszugeben, aber hier wird der Zweck Server.quelle
Die Konservierungsfunktion hat bei mir funktioniert
.white-space-pre= preserve "TEXT"
quelle