[英]I don't understand the behaviour of this Rails template rendering
我有这个控制器:
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框架。 ideally
应将myform
div替换为从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提交表单。
您可以返回html更新:
'<%= escape_javascript(render "#{param[:ftype].eql?(2) ? 'extra' : 'basic' }") %>'
然后更新元素客户端。
$("#ad_type").change(function() {
$("#ad_builder_form").submit(function(){
$('myform').html(this);
});
});
或者,为防止动态添加html出现问题,请使用jquery的live:
$('#ad_type').live('change', function() {
action = $('#ad_builder_form').attr('action');
$.post(action, jQuery.param(jQuery($('#ad_builder_form')).serializeArray()), function(data) {},
'script');
return false;
});
然后像以前一样从您的应用程序返回脚本:
$('#myform').html('<%= escape_javascript(render "#{param[:ftype].eql?(2) ? 'extra' : 'basic' }") %>'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.