【问题标题】:avoiding layout reloading in ruby on rails project避免在 ruby​​ on rails 项目中重新加载布局
【发布时间】:2015-09-18 12:07:40
【问题描述】:

在 ruby​​ on rails 中,我想动态加载页面数据。但是那个时候我不想刷新或加载布局页面,只有正文应该呈现。我有两个页面,当我从一个页面切换到另一个页面时,布局页面数据不应该重新加载,只有另一个页面数据应该加载.

【问题讨论】:

  • 这是一个基本概念。在每个 Rails 应用程序中,我们都有布局文件夹。其中我们有 home.html.erb 布局页面,用于所有主控制器视图文件。每当我运行任何页面时,它也会加载布局页面。但我不想重新加载所有页面的布局页面。如何避免这种情况。
  • 我尝试使用 ajax 调用。但它需要部分文件。但我不想将所有文件都设为部分文件。请以其他方式给我建议。
  • render layout: false
  • 是的,它不会加载布局。但我需要避免重新加载布局页面。实际上我想要布局,但不需要为每个页面再次重新加载(布局)。

标签: javascript jquery ruby-on-rails


【解决方案1】:

您可以在这里采用两种不同的方法。

  1. Turbolinks - 这会比你想要的多一点刷新,但如果你经常做这种事情,你可能想读一读。 https://github.com/rails/turbolinks

  2. 使用以下方法手动使用ajax请求:

A.将以下 gem 添加到您的 Gemfile https://github.com/rails/jquery-ujs

B.将其包含在您的 JS 中。例如在您的 JavaScript 文件中,通过包含以下内容来加载它:

//= require jquery
//= require jquery_ujs 

C:更新您的链接以包含远程:true:

<%= link_to 'New page', page_path, remote: true %>

D:在控制器中添加对 js 的响应。例如:

  def action_name
    respond_to do |format|
      format.html
      format.js
    end
  end

E:在您的视图中创建一个名为 action_name.js.erb 的新文件。然后,您可以在此文件中放置任何 javascript 代码。因此,您可以定位页面上的特定元素并将其替换为部分元素。

例如

$("#id_of_element_on_page").html("<%= escape_javascript(render(partial: 'page_content', locals: { project: @project })) %>");

差不多就是这样,当您现在单击链接时,您的应用应该发送一个 ajax 请求,并且您应该在响应中获取呈现的 javascript,这反过来应该更新您希望替换的页面上的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2010-11-10
    • 2010-12-21
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多