2013-08-12 16 views
5

我有一個模型文檔它具有屬性上下文。 Kind是一個用作枚舉的整數(使用優秀的active_enum寶石)。上下文僅適用於種類爲「2」的文檔,即如果文檔是除2之外的任何種類,則上下文將爲空。Rails:有條件地顯示/隱藏表單域的最佳方法?

所以在表單頁面創建一個新的文件,我有一個<select>選擇那種,和上下文一個textarea,它最初是隱藏的:

<%= form_for @document do |f| %> 

    ... 

    <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %> 

    <%= f.select :kind, Document.active_enum_for(:kind).to_select %> 

    ... 

<% end %> 

而且textarea的顯示和隱藏在綁定到下拉列表中的change()事件的函數中使用jQuery的show()和hide()方法。

到目前爲止,這麼好。但在編輯頁的文件,我不希望上下文textarea到總是隱藏在初始頁面加載,因爲我們可能會編輯一個文件的種類。因此,如果我們正在編輯類型2的文檔,但是在其他情況下隱藏了文本區域,我希望最初顯示textarea。

這是我現在有:

<% if @document.kind == 2 %> 
    <%= f.text_area :context, placeholder: 'Context' %> 
<% else %> 
    <%= f.text_area :context, placeholder: 'Context', style: 'display:none' %> 
<% end %> 

是不是有這樣做的更好的辦法?這對我來說有點羅嗦和多餘,有沒有辦法可以只有一個電話f.text_area,並有條件地包括style:選項?

或者我是否在意這個?

回答

10

使用此:

<%= f.text_area :context, placeholder: 'Context', style: "#{'display:none' if @document.kind == 2}" %> 

,或者你可以添加這個CSS類,

display-none{ 
    display:none; 
} 

<%= f.text_area :context, placeholder: 'Context', class: "#{'display-none' if @document.kind == 2}" %> 

感謝

+0

沒有內聯樣式請... – nXqd

+2

我同意內聯樣式是一個可怕的想法99%的時間,但我認爲「顯示:沒有;」對於將要隱藏並使用Javascript顯示的元素可能是一個例外。 – GMA

0

或者你可以嘗試的JavaScript?這是一種減少重複代碼的方法,如果你有很多隱藏的字段,這種方式有一些優點。

<%= f.text_area :context, placeholder: 'Context' %> 

<script type="text/javascript"> 
    $(function(){ 
     if ($('#document_kind').val() != '2') 
      $('#document_context').hide(); 
    }); 
</script> 
相關問題