持久性和JQuery不使用AJAX部分中的表单字段

时间:2013-02-19 16:02:01

标签: ajax ruby-on-rails-3 jquery-ui partials

我在AJAX部分中有两个表单问题。 Rails 3.2.8使用带有Twitter Bootstrap和Postgresql的simple_form gem。

当我使用标准的simple_form语法时,如果在输入数据后返回编辑页面,则表单字段中的值将保持不变。但在我的AJAX部分中,我有两个问题。首先,我的表单中的值不会持久存在。其次,我的美味JQuery东西都没有,比如Datepicker。

我使用非常标准的方法来渲染AJAX部分:

在我的编辑视图中,我有通过AJAX呈现不同形式的YES / NO按钮:

<%= f.label "Yes/No question here?" %>
<%= link_to "Yes", privhealth_yes_divcase_path(:id => @divcase.id), :class => "btn btn-mini", remote: true %>
<%= link_to "No", privhealth_no_divcase_path(:id => @divcase.id), :class => "btn btn-mini", remote: true %>

routes.rb中:

resources :divcases do
  member do
    get 'privhealth_yes'
    get 'privhealth_no'
  end
end

回到编辑视图中,我还有一个条件,在初始页面加载时呈现正确的AJAX部分,具体取决于布尔值,使AJAX部分“粘滞”:

<% if @divcase.enrolled == true %>
    <div id="privhealth"><%= render 'privhealth_yes' %></div>
<% elsif @divcase.enrolled == false %>
    <div id="privhealth"><%= render 'privhealth_no' %></div>
<% elsif @divcase.enrolled.blank? %>
    <div id="privhealth"></div>
<% end %>

divcases_controller.rb:

def show_privhealthyes
  respond_to do | format |
    format.js {render 'privhealth_yes.js'}
  end
end
def show_privhealthno
  respond_to do | format |
    format.js {render 'privhealth_no.js'}
  end
end

privhealth_yes.js.erb:

$( "#privhealth" ).html( "<%= escape_javascript(render('privhealth_yes', divcase: @divcase)) %>" );

privhealth_no.js.erb:

$( "#privhealth" ).html( "<%= escape_javascript(render('privhealth_no', divcase: @divcase)) %>" );

AJAX部分中出现问题。使用AJAX partials之外的标准simple_form语法,我的表单是粘性的 - 当我返回编辑页面时,这些值在这些表单中保持不变。此外,我的JQuery东西工作得很好。例如,以下工作正常在我的_form.html.erb上,在partials之外:

<%= f.input :boolean_attribute,
            :collection => [['Yes', true], ['No', false]],
            :label => "Is it true or false?",
            :as => :radio_buttons,
            :item_wrapper_class => 'inline' %>

但是在部分内容中,我必须执行以下操作才能使其“粘滞”并避免出现nil类错误:

<%= simple_fields_for(Divcase.new) do |f| %>

<% if @divcase.present? && (@divcase.boolean_attribute == true) %>
<%= f.input :boolean_attribute,
            :collection => [['Yes', true], ['No', false]],
            :label => "Is it true or false?",
            :as => :radio_buttons,
            :item_wrapper_class => 'inline',
            :checked => true %>
<% elsif @divcase.present? && (@divcase.boolean_attribute == false) %>
<%= f.input :boolean_attribute,
            :collection => [['Yes', true], ['No', false]],
            :label => "Is it true or false?",
            :as => :radio_buttons,
            :item_wrapper_class => 'inline',
            :checked => false %>
<% else %>
<%= f.input :boolean_attribute,
            :collection => [['Yes', true], ['No', false]],
            :label => "Is it true or false?",
            :as => :radio_buttons,
            :item_wrapper_class => 'inline' %>
<% end %>
<% end %>

非常不优雅。此外,此解决方法根本不适用于日期字段。它们默认回到当前日期。

关于持久性问题的任何想法? JQuery问题?谢谢你的帮助!

0 个答案:

没有答案