我有一个名为index的rails操作,它会为我的页面内容和布局呈现内容。当我使用浏览器进行/ index操作时,它的工作方式与预期的一样。我希望能够通过使用Ajax调用它来呈现此操作,我使用以下方法执行此操作:
<%= link_to "Back", orders_path, :id => 'back_btn', :remote => true %>
<%= javascript_tag do %>
jQuery("#back_btn").bind("ajax:complete", function(et, e){
jQuery("#mybox").html(e.responseText);
});
<% end %>
当以这种方式调用动作时,我希望它能够渲染并传递索引操作,不包括布局。我怎么能这样做?
答案 0 :(得分:4)
您应该可以将format.js操作添加到控制器操作中,如下所示:
respond_to do |format|
format.js
format.html
format.json { render json: @foos }
理想情况下,您需要创建一个index.js.erb文件来构建页面内容:
$('#foos_list').update("<%= escape_javascript(render(@foos)) %>");
如果您要更新div的内容,基本上更新布局内的整个页面,那么您将需要稍微更改它。在format.js中,你可以这样做:
format.js { render 'foos/index', :layout => false }
但是如果你试图使用ajaxified前端,我可以推荐一个框架来实现这一点,比如Spine吗?它将帮助您建立自己的网站。
此外,使用这样的框架将迫使您根据@ Zepplock的第二个建议分离您的应用程序。
答案 1 :(得分:1)
您可以检测请求是否是XML HTTP请求,然后呈现如下的空白布局:
render layout: 'blank' if request.xhr?
您需要在app/views/layouts/blank.html.erb
中创建一个空白布局,如下所示:
<%= yield %>
答案 2 :(得分:0)
您需要一种让服务器知道请求类型存在差异的方法。它可以通过几种不同的方式完成: