簡體   English   中英

Rails HAML條件link_to

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM