[英]Rails HAML conditional link_to
美好的一天,我有這種代碼:
= link_to some_url do
PLENTY OF MARKUP HERE
現在,我需要將此鏈接設置為可選,因此,如果不滿足條件,則需要打印普通的MARKUP,因此,第一個抗DRY解決方案:
- if condition
= link_to some_url do
PLENTY OF MARKUP HERE
-else
PLENTY OF MARKUP HERE REPEATED :(
如果將PLENTY OF MARKUP
分為部分內容,則是另一種解決方案,所以如果沒有部分內容的另一簡單解決方案在哪里,我會繞線嗎? 我嘗試了這個:
= link_to_if condition?, some_url do
PLENTY OF MARKUP HERE
但是很遺憾, link_to_if
在這里無法正常工作。
與link_to
相比, link_to_if
使用該塊的目的不同。 因此它無法做您想要的。
您可以定義自己的助手來完成您想要的事情。
如果只需要執行幾次操作,而不是使用自定義幫助程序,則可以將塊的結果( PLENTY OF MARKUP
)保存到局部變量中,以使您輕松重復使用它。 例如:
- plentyofmarkup = do
PLENTY OF MARKUP HERE
- if condition
= link_to (raw plentyofmarkup), some_url
- else
= raw plentyofmarkup
或者:
= link_to_if condition, (raw plentyofmarkup), some_url
請注意, raw
函數用於阻止Rails自動轉義字符串。
要定義自己的幫助器方法,請嘗試:
def link_to_if_do condition, options = {}, html_options = {}
blockresult = yield
link_to_if condition, blockresult, options, html_options
end
您總是可以編寫自己的條件鏈接幫助器,並將其放在application_helper中:
def conditional_link_to( condition, url, options = {}, html_options = {}, &block ) do
if condition
link_to(name, options, html_options, &block)
else
if block_given?
block.arity <= 1 ? capture(name, &block) : capture(name, options, html_options, &block)
else
name
end
end
end
這很大程度上取自link_to_unless ,但已進行了修改以將塊傳遞給link_to。 我沒有測試過,但是足以給您一個想法。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.