0

我有一个使用 Ajax 的应用程序,这很有帮助,因为每次用户单击链接时都不必刷新整个页面。

在 application.html.erb 文件中我有:

<body>
  <%= render :partial => 'layouts/user_page_with_map' if @show_map %> 

  <div class ='page-content'>     
     <%= content_for?(:body) ? yield(:body) : yield %>
  </div>

</body>

我的控制器中的 Show 方法是:

  def show  
    @show_map = true  
    @review = Review.new
    @reviews = @user.reviews
  end

问题是部分内容一直停留在我的页面上——收益内容出现在其下方。因此,如果一个人点击“联系我们”或“关于我们”或其他任何内容,它会出现在地图内容下方,即使它与“联系我们”或“关于我们”无关。

我远非 Ajax 专家——得到了很多帮助,但它在消除需求方面非常有用——希望如此!- 对于所有这些页面重新加载。有没有办法对其进行编码,以便仅在单击的链接激活“显示”页面时才能看到部分内容?任何其他相关建议将不胜感激,谢谢。

克里斯。

4

2 回答 2

3

您可以在收到页面内容后,在 ajax 方法中将其截断。我假设您正在使用 jQuery:

$.ajax({
  type: "GET",
  #...
  success: function(data) {
    $(".page-content").replaceWith($(data).find(".page-content"));
  }
});

我的意见,它是你最好的方式。在这种情况下,您的后端并不关心“是否应该使用布局进行渲染”。

于 2013-04-21T01:53:18.623 回答
0

假设您的控制器被调用FooController,而您通过 Ajax 调用的操作是bar. 以下是一个合适的解决方案。

配置/路由.rb:

get 'bar', to: 'foos#bar'

应用程序/控制器/foos_controller.rb:

class FoosController < ApplicationController
    layout false, only: [:bar]                    # <-- layout false is key

    def bar
        @results = Foo.get_results(bar_params)
    end

private

        def bar_params
            params.permit(:utf8, :query, :attribute1, :attribute2)
        end
end

应用程序/视图/foos/bar.html.erb:

<% @results.each do |result| %>
    <p><%= result.inspect %></p>
<% end %>
于 2014-06-23T00:14:12.397 回答