我有4个可以在视图上呈现的可能部分,但一次只能加载一个部分。我如何使用jQuery或ajax能够在点击时呈现不同的部分?谢谢!
这是我想要激活4个部分的标题。当你点击一个时,我希望它在subnav下面渲染一个部分并将其更改为在subnav中处于活动状态。
#subnav
%ul
%li
%a.active{:href => "dashboard-fans.html"}
%img{:alt => "", :src => image_path("icons/fans.svg")}>/
Fans
%li
%a.active{:href => "dashboard-rewards.html"}
%img{:alt => "", :src => image_path("icons/rewards.svg")}>/
Rewards
%li
%a{:href => "dashboard-payment-info.html"}
%img{:alt => "", :src => image_path("icons/creditcard.svg")}>/
Payment Info
%li
%a{:href => "dashboard-profile.html"}
%img{:alt => "", :src => image_path("icons/edit.svg")}>/
Profile
答案 0 :(得分:1)
您可以执行类似
的操作 <%= link_to 'Fans', {view: :dashboard_fans}, remote: true, class: 'active %>
将作为ajax请求回调到同一个控制器。然后,您可以创建一个javascript文件show.js.erb
(例如,如果您的控制器操作是节目)。
在javascript文件中,您可以进行选择:
<% if params[:view].present? %>
<% case params[:view] %>
<% when 'dashboard_fans' %>
$('#empty_div_in_show').html('<%= j render "path_to_your_partial" %>');
<% end %>
<% end %>
值得注意的是,case
可以被删除,您可以通过view
参数来渲染部分参数,但这最终可能会创建一些糟糕的juju而信任最终用户不要乱用。
或者,您可以执行类似
的操作 %w(' dashboard_fans dashboard_rewards ').include?(params[:view]) which would be similar to using
case`
如果您正在显示大量记录索引并且每个记录都有一个模态或某些内容,则可以使用相同类型的内容。您可以让它使用GID / ID /任何对象将AJAX请求发送回服务器,而不是为每个记录加载模态,然后将模态渲染为空div。从那里你可以设置要从javascript渲染显示的模态。这将在应用程序上创建比加载所有模态更小的占用空间。我知道这与你的问题没有直接关系,但也值得考虑。