2017-09-18 61 views
0

我想包裝和元素在一個a標記,但只給出一定的條件。給出一個條件在phoenix模板中包裝html元素

代碼看起來像這樣,但我確定必須有更好的方法。

<%= if condition do %> 
<a href="/"> 
<% end %> 

<p>Text</p> 

<%= if condition do %> 
</a> 
<% end %> 

什麼是更好的方式來寫這個?

回答

1

我想不出有什麼辦法可以比你已經寫的更優雅,如果你只想使用一次,但是如果你想要一個可重用的函數來做一些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> 
1

我肯定會使用正確的視圖的模塊中聲明的函數:

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 

然後你就可以用它來爲視圖中的所有模板。如果您需要在全球範圍內擁有它,則可以導入其他視圖。

相關問題