【问题标题】:Rails 3 render different partial using linkRails 3使用链接渲染不同的部分
【发布时间】:2011-11-02 16:52:51
【问题描述】:

我有一个汽车经销商的项目,在车上show.html 我在页面左侧有照片库,在右侧有车辆信息。车辆信息代码位于名为 _vehicle_info 的部分中,图库位于 _car_gallery 中,如下所示:

<div id="column-left">
    <%= render :partial => "car_gallery" %>
</div>
<div id="column-right">
    <%= render :partial => "vehicle_info" %>
</div>

car_gallery我只能看到12张汽车的照片。

问题:

我想要做的是在car_gallery div附近有一个链接,当用户点击它时,左侧的部分vehicle_info将被部分car_gallery_all替换(这个部分包含所有那辆车的照片,不限于12)。 有没有什么捷径可以做到这一点?请帮忙。

【问题讨论】:

  • 这是一个javascript的东西。我在您的问题中添加了 jQuery Tag。您需要做的是替换 div 的内容,这可以使用 jQuery 轻松完成。
  • 您想在不刷新页面的情况下完成此操作吗?
  • 是的,不刷新.. jquery 选项卡将是一种解决方案,但如果有的话,我正在寻找另一种方法。

标签: jquery ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

因缺少代表而编辑:

这将在 rails 3.1 中工作,不确定 3.0 或更低版本..

此外,如果我理解正确,davidb 的答案将加载 所有 图像,无论用户是否想要查看它们 - 此解决方案只会在用户点击时加载它们查看它们的链接..

.................................................. ....................

控制器

                def all_car_photos
                  ...
                  respond_to do |format|
                     format.js
                  end
                end

查看

            <div id="column-left">
                <%= render :partial => "car_gallery" %>
            </div>
            <div id="column-right">
                <%= render :partial => "vehicle_info" %>
            </div>
            <%= link_to "Show All Photos", path_to_controller_action(@car), { :method => :get, :remote => true} %>

all_car_photos.js.erb

            $('#column-right').html("<%= escape_javascript(render "car_gallery_all") %>");

好的,视图包含指向 all_car_photos 控制器动作的 link_to 方法。这里的关键是 link_to 包含 :remote => true - 它使用内置的 Rails AJAX 功能提交请求。

控制器动作做了它需要做的事情,但是用 .js 视图响应 - all_car_photos.js.erb - 这包含一行 jQuery,它将用 'car_gallery_all 替换 'column-right' div 的内容'部分..

已经晚了,但该设置应该可以工作..

【讨论】:

  • 我正在尝试您的示例,我会看到结果。当我完成工作时,我会回复“回答接受”。谢谢。
  • 不用担心。这不是复制/粘贴代码。它需要调整,但总体思路会让你得到你想要的。
【解决方案2】:

添加链接并给它一个ID。您使用“#”是因为它不会有效地链接到任何东西。

<%= link_to "my link text", "#", :id => "replace_vehicle_info" %>

然后你添加一些 jQuery 到你的 public/javascript/application.js (我除了你使用 rails 3 而不是 3.1,因为你的问题是这样标记的)来替换那个 div 的内容。

$("#replace_vehicle_info").click(function() {
     $("#vehicle_info").replaceWith(<your html here>)
}) 

【讨论】:

  • 谢谢,我会试试这个作为 FiveOhOne asnwer 的替代品。
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 2012-07-26
  • 2023-03-05
  • 2023-03-11
  • 2018-05-10
  • 1970-01-01
  • 2011-03-22
  • 2011-07-23
相关资源
最近更新 更多