2016-12-03 3 views
1

Ich habe einen Link, den ich in einer Reihe von Breadcrumbs (mit Slime für Markup) anzeigen möchte.Phoenix: Funktion in Zeichenfolge in Vorlage interpolieren

= link(@project.name, to: project_path(@conn, :show, @project)) 

Dies ist in Ordnung. Aber ich möchte es im Zusammenhang mit anderen Links zeigen.

# by concatenation 
= link("Projects > ", to: project_path(@conn, :index)) <> link(@project.name, to: project_path(@conn, :show, @project)) 

# or by interpolation 
#{link("Projects", to: project_path(@conn, :index))} > #{link(@project.name, to: project_path(@conn, :show, @project))} 

Die gewünschte Ausgabe wird in etwa wie folgt aussehen:

Projects > Projektname

Keine dieser Techniken jedoch arbeiten. Wie kann ich diesen Link zu diesem Text hinzufügen?

Bonuspunkte, wenn Sie erklären können, warum das nicht wie oben funktioniert.

+0

Warum man sich nicht in verschiedenen Linien setzen? '= link (...) \ n | > \ n = Link (...) '? – Dogbert

+0

Interpolation bietet viel mehr Kontrolle und Klarheit, denke ich, aber ich verstehe Ihren Standpunkt – steel

Antwort

2

machen Sie es einfach mehrzeiligen:

= link("Projects > ", to: project_path(@conn, :index)) 
= link(@project.name, to: project_path(@conn, :show, @project)) 

Sie können immer noch setzen sie in einer einzigen Zeile:

link Funktion gibt wie dieses Tupels: {:safe, "link_string"}. Wenn Sie eine Verknüpfung als Zeichenfolge verwenden möchten, müssen Sie das zweite Element aus dem Tupel über Kernel.elem (Tupel, 1) auswählen. See what content_tag (which is used in link()) returns.

Auch müssen Sie alle HTML-Tags mit raw() rendern.

Dies funktioniert:

= raw "#{Kernel.elem(link("Projects > ", to: project_path(@conn, :index)), 1)} #{Kernel.elem(link(@project.name, to: project_path(@conn, :show, @project)), 1)}" 
Verwandte Themen