W moim szablonie Railsów chciałbym uzyskać ostateczny kod HTML w tym celu za pomocą HAML:
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
Szablon, który się zbliża:
I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
, then render this half of the sentence if a condition is met
Możesz jednak zauważyć, że tworzy to spację między łączem a przecinkiem. Czy jest jakiś praktyczny sposób na uniknięcie tych białych znaków? Wiem, że istnieje składnia do usuwania białych znaków wokół tagów, ale czy tę samą składnię można zastosować tylko do tekstu? Naprawdę nie podoba mi się rozwiązanie z dodatkowymi znacznikami, aby to osiągnąć.
ruby-on-rails
haml
Matchu
źródło
źródło
succeed
konkretnie)? Dla mnie to wciąż wydaje nieoczywiste i trochę brzydki: gist.github.com/1665374@condition == false
, co jest bardziej brzydkie niż spacja przed tym przecinkiem.Możesz to również zrobić za pomocą modyfikatora Hamla „trymowanie białych znaków”. Wstawienie
>
po deklaracji Haml zapobiegnie dodawaniu wokół niej białych znaków:produkuje:
Jednak, jak widać,
>
modyfikator usuwa również białe znaki przed łączem, usuwając pożądaną przestrzeń między słowami a łączem. Nie wymyśliłem jeszcze ładnego sposobu na obejście tego, z wyjątkiem dodania
na końcu „Najpierw będę”, na przykład:Który w końcu daje pożądane wyjście bez wielu trudnych do odczytania interpolacji:
źródło
ma to szczególne znaczenie, nie jest to zwykły biały znak - to nierozerwalny biały znak, co oznacza, że podczas zawijania tekstu przeglądarka zrobiłaby wszystko, aby słowa były ze
sobą powiązane, a nie zawsze tego chcesz. 
zamiast
zwykłej białej spacji.W porządku, oto rozwiązanie, na którym się decyduję:
Pomocnik
Widok
W ten sposób białe znaki są domyślnie wykluczone, ale nadal mogę jawnie dołączyć je linią „\ n”. (Wymaga podwójnego odwrotnego ukośnika, ponieważ w przeciwnym razie HAML interpretuje go jako rzeczywisty znak nowej linii.) Daj mi znać, jeśli jest lepsza opcja!
źródło
Możesz użyć „składni aligatora” HAML
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
źródło
Kiedyś podejście do tego rodzaju rzeczy polegało na zastosowaniu interpolacji ciągów:
Nie podoba mi się wygląd literału ciągu w interpolacji, ale użyłem go wcześniej z wcześniej zadeklarowanymi ciągami lub dynamicznie generowanymi ciągami.
źródło
Możesz to zrobić, aby zachować wiodącą spację:
Spacja jest w cudzysłowie.
źródło
Chociaż nie jest to dobrze udokumentowane, można to łatwo osiągnąć dzięki zachowaniu białych znaków HAML (>) w połączeniu ze spacjami ASCII (& # 32;), a nie za pomocą pomocników:
Dzięki temu uzyskasz to, czego chcesz:
Ale zgadzam się, HAML musi wymyślić lepszy sposób na zrobienie tego, ponieważ dodaje niepotrzebne znaki ASCII do strony (ale nadal jest bardziej wydajne niż używanie pomocników).
źródło
Istnieje składnia nawiasów ostrych "munching białych znaków", w przeciwnym razie napisz dla niej metodę pomocniczą.
źródło
Natknąłem się na podobny problem i znalazłem to, więc pomyślałem, że opublikuję inne rozwiązanie, które nie wymaga metody pomocniczej. Użyj interpolacji języka Ruby # {}, aby zawinąć link i instrukcje if:
Działa to w 3.0.18, może też działać we wcześniejszych wersjach.
źródło
.haml
plik - fakt, że zawiera link i przecinek, tak naprawdę niczego nie wskazuje.Jeszcze inna opcja, z której korzystałem w przeszłości:
źródło
Zawsze możesz też zrobić:
źródło
Rozwiązanie, które uzyskałem, to:
Możesz użyć
=
, chociaż=
jest używany do wyświetlania wyniku kodu Rails, ale tutaj będzie służył celowi.źródło
Funkcja zachowania zadziałała dla mnie
.white-space-pre= preserve "TEXT"
źródło