【问题标题】:Render partial dependent upon which link_to clicked部分渲染取决于点击了哪个链接
【发布时间】:2013-02-10 20:20:07
【问题描述】:

我有一个链接列表,单击时我希望它通过 Ajax 显示其相关部分,我已成功呈现第一个,但希望实现一些 if 语句来识别已单击哪个 link_to。如何区分链接?

<ul class="nav nav-tabs">
<li><%= link_to 'Home', posts_path %></li>
<li><%= link_to 'Tynewydd', posts_path, :remote => true %></li>
<li><%= link_to 'Woodside', root_path %></li>
<li><%= link_to 'Sandpiper', root_path %></li>
<li><%= link_to 'Outreach', root_path %></li>
<li><%= link_to 'Company', root_path %></li>
<li><%= link_to 'Staff', root_path %></li>
</ul>

index.js.erb

$('#newsResults').html('<%= escape_javascript(render partial: 'tynewyddposts') %>');

我在想这样的事情

<% if params[:tynewydd] %>
$('#newsResults').html('<%= escape_javascript(render partial: 'tynewyddposts') %>');
<% end %>

但是使用什么作为参数呢?

任何人有任何想法,有点卡在这里

【问题讨论】:

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


    【解决方案1】:

    尝试将您的链接更改为如下所示:

    <%= link_to 'Tynewydd', posts_path(:type => 'Tynewydd'), :remote => true %>
    

    然后在你的index.js.erb:

    <% if params[:type] == 'Tynewydd' %>
      $('#newsResults').html('<%= escape_javascript(render partial: 'tynewyddposts') %>');
    <% end %>
    

    【讨论】:

    • 感谢您的回答,为清楚起见,可以将 :type 命名为我想要的任何名称吗?它只是我设置的参数
    【解决方案2】:

    我建议使用单个参数键(如view),其值将是部分的名称。如果给定名称未映射到部分,则应提供默认部分。它可能看起来像这样:

    # methods available to controllers and helpers
    def post_partials
      %w[home tynewydd]
    end
    
    def root_partials
      %w[woodside sandpiper outreach company staff]
    end
    
    # posts controller
    @view = post_partials.detect?(params[:view]) || 'home'
    
    # home controller
    @view = root_partials.detect?(params[:view]) || 'woodside'
    
    # view
    <ul class="nav nav-tabs">
      <li><%= link_to 'Home', posts_path(:view => 'home') %></li>
      <li><%= link_to 'Tynewydd', posts_path(:view => 'tynewydd', :remote => true %></li>
      <% root_partials.each do |partial| %>
        <li><%= link_to partial.titelize, root_path(:view => partial) %></li>
      <% end %>
    </ul>
    
    <%= render @view %>
    

    【讨论】:

      【解决方案3】:

      您可以像这样通过link_to 传递值:

        <li><%= link_to 'Sandpiper', select_partial_path(option: "other_partial") %></li>
      

      这将在您的控制器的 select_partial 操作中为您提供 :option 符号。由您决定如何使用它来选择部分进行渲染。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 2017-07-26
        • 1970-01-01
        • 2019-05-09
        • 1970-01-01
        • 2021-10-21
        相关资源
        最近更新 更多