我想包裝和元素在一個a
標記,但只給出一定的條件。給出一個條件在phoenix模板中包裝html元素
代碼看起來像這樣,但我確定必須有更好的方法。
<%= if condition do %>
<a href="/">
<% end %>
<p>Text</p>
<%= if condition do %>
</a>
<% end %>
什麼是更好的方式來寫這個?
我想包裝和元素在一個a
標記,但只給出一定的條件。給出一個條件在phoenix模板中包裝html元素
代碼看起來像這樣,但我確定必須有更好的方法。
<%= if condition do %>
<a href="/">
<% end %>
<p>Text</p>
<%= if condition do %>
</a>
<% end %>
什麼是更好的方式來寫這個?
我想不出有什麼辦法可以比你已經寫的更優雅,如果你只想使用一次,但是如果你想要一個可重用的函數來做一些HTML內容的條件包裝任意屬性的標籤,我會使用一個輔助函數是這樣的:
查看:
defmodule MyApp.PageView do
use MyApp.Web, :view
def content_tag_if(condition, name, attrs, [do: content]) do
if condition do
content_tag name, attrs, [do: content]
else
content
end
end
end
模板:
<%= content_tag_if 1 > 2, :a, [href: "/"] do %>
<p>Text</p>
<% end %>
<%= content_tag_if 1 < 2, :a, [href: "/"] do %>
<p>Text</p>
<% end %>
輸出:
<p>Text</p>
<a href="/">
<p>Text</p>
</a>
我肯定會使用正確的視圖的模塊中聲明的函數:
def wrap_in_a_if_condition(html_text, href, condition) do
if condition do
# here build A - propably using [Phoenix.HTML.link/2][1]
else
html_text
end
end
然後你就可以用它來爲視圖中的所有模板。如果您需要在全球範圍內擁有它,則可以導入其他視圖。