坚持在田野里褪色

时间:2015-07-28 11:44:10

标签: jquery ruby-on-rails

Ruby on Rails 4.2。

我有一个表单,下一个下拉列表取决于之前的选择。

以下工作(我们在rails控制器和js文件之间有一个映射):

(function(App, $, undefined) {
  'use strict';

  App.AdminReports = function() { # controller name

    this.create = function(e) {
      $('#quarter').css('display', 'none');
      $('#kind_vo').change(function(){
        if($('#kind_vo :selected').text() == 'Cele firm' || $('#kind_vo :selected').text() == 'Cele lokalizacji'){
          $('#quarter').fadeIn('fast');
        }
      });
    };
  };
})(window.App = window.App || {}, jQuery);

但是,如果这个在字段中淡出没有通过rails验证(在我的情况下它是validates :quarter, presence: true),它就会再次消失。有没有办法让这个领域更长久?我想这是因为重新加载后端验证页面失败了。

我该怎么办?

可能有一种简单的方法可以保持褪色的字段直到控制器发生变化或类似的事情。

1 个答案:

答案 0 :(得分:1)

这就是我解决问题的方法:

1。添加隐藏的CSS类:

.hidden {
  display: none;
}

2。创建一个帮助器来输出表单行。

module FormRowHelper
  # A thin wrapper around content_tag to produce an input row.
  # @param [Symbol|String] tag_name
  # @param [Hash] kwargs - hash of options passed to content_tag
  #   @option [Boolean] show - adds a hidden class if false
  # @yield block to content_tag
  # @return [String]
  def input_row(tag_name = :div, show: true, **kwargs, &block)
    classes = kwargs[:class].try(:split) || ['row']
    classes << ['hidden'] unless show
    options = kwargs.except(:class).merge(
      class: classes.join(' ')
    )
    content_tag(tag_name, options) do
      yield if block_given?
    end
  end
end

3。根据A的状态使用助手显示/隐藏B的输入。

<%= form_for(@model) do |f| %>

  <div class="row">
    <%= f.select :a do %>
      <%= options_for_select(
        ['Cele firm','Cele lokalizacji', 'Foo', 'Bar']
        )
      %>
    <% end %>
  </div>
  <%= input_row(
    show: ['Cele firm', 'Cele lokalizacji'].include?(@model.a), 
    id: 'kind_vo') do %>
    <%= f.select :b do %>
      <%= options_for_select([
        ['Lisbon', 1, { 'data-size' => '2.8 million' }],
        ['Madrid', 2, { 'data-size' => '3.2 million' }]
        ])
      %>
    <% end %>
  <% end %>
<% end %>