У меня есть этот контроллер:
class FormCreatorController
def build_form
if param[:ftype] == 2
@partial_file = "extra"
else
@partial_file = "basic"
end
respond_to do |format|
format.js
end
end
end
Это вызывается из new
представления, где код выглядит так:
<div class="column span-16 last">
<%= form_tag build_form_ads_path,:method => :get,:remote => true,:id => "ad_builder_form" do %>
<div class="column span-4">
<strong>Form type</strong>
</div>
<div class="column span-12 last">
<%= select_tag(:ad_type,options_for_select(@ad_types_mapped)) %>
</div>
<% end %>
<div class="column span-16 last" id="myform">
Please select an option
</div>
</div>
Я использую jQuery в качестве своего ajax-фреймворка.
myform
div, ideally
следует заменить содержимым того, что возвращается из build_form. У меня есть это в build_form.js.erb
:
$('#myform').html($('<%= render :partial => @partial_file %>'))
Моя основная форма содержит это:
<h1>Basic</h1>
Моя extra
форма содержит это:
<h2>Extra</h2>
Но, когда сделан запрос XHR, с моим div ничего не происходит. Если, однако, я поставлю это в свои частичные:
$('#myform').html("<h1>Basic</h1>")
и
$("#myform").html("<h1>Car</h1>");
тогда они правильно отображаются на странице. Создание пользовательских форм с использованием конкатенации строк JavaScript является утомительным, но выполнимым. Я уверен, что есть лучший способ сделать вещи. Что я должен сделать, чтобы код из моих партиалов корректно отображался вместо моего div?
РЕДАКТИРОВАТЬ: возможно, это помогает. Это содержимое моего application.js:
$().ready(function() {
jQuery.ajaxSetup({
'beforeSend': function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
});
$("#ad_type").change(function() {
$("#ad_builder_form").submit();
});
});
Каждый раз, когда изменяется значение select, я отправляю форму с помощью jQuery.