【问题标题】:How to render one of 4 partials with Rails, jquery/ajax如何使用 Rails、jquery/ajax 渲染 4 个部分之一
【发布时间】:2014-10-02 20:10:27
【问题描述】:

我有 4 个可以在视图上渲染的可能部分,但一次只能加载一个部分。如何使用 jQuery 或 ajax 在点击时呈现不同的部分?谢谢!

这是我想从中激活 4 个部分的标题。当您单击一个时,我希望它在子导航下方呈现部分并将其更改为在子导航中处于活动状态。

#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

【问题讨论】:

  • 你能分享一些你现有的代码吗?你会有更多的运气给我们更多的背景:)
  • 是的,很抱歉!

标签: jquery ruby-on-rails ajax


【解决方案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 usingcase`

如果您要显示大量记录索引并且每个记录都有模式或其他内容,则可以使用相同类型的东西。无需为每条记录加载模式,您可以让它使用 GID/ID/该对象的任何内容将 AJAX 请求发送回服务器,然后将模式呈现为空 div。从那里您可以将模式设置为从 javascript 渲染中显示。与加载所有模式相比,这将在应用程序上创建更小的占用空间。我知道这与您的问题没有直接关系,但也值得考虑。

【讨论】:

    猜你喜欢
    • 2015-01-04
    • 2017-05-03
    • 2014-05-05
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多