6

我有一个具有属性kindcontext的模型Document。Kind 是用作枚举的整数(使用优秀的gem)。上下文仅适用于类型“2”的文档,即如果文档不是类型 2,上下文将为空白。active_enum

因此,在创建新文档的表单页面中,我有一个<select>选择类型和一个用于上下文的文本区域,它最初是隐藏的:

<%= 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 %>

并且使用 jQuery 的 show() 和 hide() 方法在绑定到下拉列表中的 change() 事件的函数中显示和隐藏 textarea。

到现在为止还挺好。但是在文档的编辑页面上,我不希望在初始页面加载时始终隐藏上下文文本区域,因为我们可能正在编辑类型2的文档。因此,如果我们正在编辑类型 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:选项?

还是我想多了?

4

2 回答 2

11

用这个 :

  <%= 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}" %>

谢谢

于 2013-08-12T09:03:44.040 回答
1

或者你可以试试javascript?这是一种减少重复代码的方法,如果你有很多字段要隐藏,这种方法有一些好处。

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

<script type="text/javascript">
    $(function(){
        if ($('#document_kind').val() != '2')
            $('#document_context').hide();
    });
</script>
于 2013-08-12T09:13:01.560 回答