如何让Twitter-Bootstrap导航显示活动链接?

Lea*_*RoR 106 ruby-on-rails twitter-bootstrap

我不了解Twitter Bootstrap如何为导航执行活动链接.如果我有这样的常规导航(在轨道连接上使用ruby):

<ul class="nav">
  <li class="active"> <a href="/link">Link</a> </li>
  <li class=""> <a href="/link">Link</a> </li>
  <li class=""> <a href="/link">Link</a> </li>        
</ul>
Run Code Online (Sandbox Code Playgroud)

如何根据点击的链接保持活动状态?

yor*_*rch 168

你可以使用类似的东西(非常类似于@phil提到的,但更短一些):

<ul class="nav">
  <li class="<%= 'active' if current_page?(root_path) %>"><%= link_to "Home", root_path %></li>
  <li class="<%= 'active' if current_page?(about_path) %>"><%= link_to "About", about_path %></li>
  <li class="<%= 'active' if current_page?(contact_path) %>"><%= link_to "Contact", contact_path %></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 如果您有子导航,则不起作用.路径发生变化,但你在同一部分..有意义吗? (10认同)
  • 是的,正确的,如果你想突出显示一个菜单项,无论你在同一个控制器内运行什么方法,你可以使用@Pierre解决方案:`'active'如果params [:controller] =='controller1'` (3认同)
  • 如果current_page?(root_path)%>`,如何在`<%='active'中添加更多路径或特定路径,如`user _*_ path`? (2认同)

Pie*_*rre 94

刚刚在Twitter Bootstrap Pills with Rails 3.2.2中回答了同样的问题

<ul class="nav">
  <li class="<%= 'active' if params[:controller] == 'controller1' %>"> <a href="/link">Link</a> </li>
  <li class="<%= 'active' if params[:controller] == 'controller2' %>"> <a href="/link">Link</a> </li>
  <li class="<%= 'active' if params[:controller] == 'controller3' %>"> <a href="/link">Link</a> </li>        
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个想法是正确的,但是直接使用params hash似乎是一个坏主意.同样反复重复相同的代码.我建议至少使用current_page?检查当前控制器/操作的方法,并且还将代码移动到帮助程序中以避免代码重复. (20认同)
  • HAML实现`%li {:class =>"#{'active'if current_page?(root_path)}"} = link_to"Home",root_path` (13认同)
  • Rails文档建议使用`controller_name`和`action_name`帮助程序,而不是从params哈希中访问它们. (6认同)
  • 我想知道如何用haml编写相同的内容.转换为haml对我不起作用.或者也许我错了 (2认同)

Hes*_*ham 47

https://github.com/twg/active_link_to

<%= active_link_to 'Users', users_path, :wrap_tag => :li %>
Run Code Online (Sandbox Code Playgroud)

#=> <li class="active"><a href="/users">Users</a></li>

  • 爱它.为什么要改写方向盘? (7认同)

Dan*_*iel 33

我使用帮助器以Rails的表单助手的方式实现它.

在帮手(例如app/helpers/ApplicationHelper.rb):

def nav_bar
  content_tag(:ul, class: "nav navbar-nav") do
    yield
  end
end

def nav_link(text, path)
  options = current_page?(path) ? { class: "active" } : {}
  content_tag(:li, options) do
    link_to text, path
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,在视图中(例如app/views/layouts/application.html.erb):

<%= nav_bar do %>
  <%= nav_link 'Home', root_path %>
  <%= nav_link 'Posts', posts_path %>
  <%= nav_link 'Users', users_path %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

此示例生成(在"用户"页面上时):

<ul class="nav navbar-nav">
  <li><a href="/">Home</a></li>
  <li><a href="/posts">Posts</a></li>
  <li class="active"><a href="/users">Users</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)


Chr*_*ren 22

使用此选项可以在没有服务器代码的情况下根据当前路由选择导航中的活动链接:

    $(document).ready(function () {
        $('a[href="' + this.location.pathname + '"]').parent().addClass('active');
    });
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的解决方案,因为它也适用于下拉菜单,我在其中加入了行“ $('li.active')。closest('。dropdown')。addClass('active');`突出显示父菜单。 (2认同)

Mel*_*emi 11

我在haml中使用逻辑和(&&)找到了成功:

%ul.nav
  %li{class: current_page?(events_path) && 'active'}
    = link_to "Events", events_path
  %li{class: current_page?(about_path) && 'active'}
    = link_to "About Us", about_path
Run Code Online (Sandbox Code Playgroud)


phi*_*kov 5

对于每个链接:

<% if current_page?(home_path) -%><li class="active"><% else -%><li><% end -%>
  <%= link_to 'Home', home_path %>
</li>
Run Code Online (Sandbox Code Playgroud)

甚至

<li <% if current_page?(home_path) -%>class="active"<% end -%>>
  <%= link_to 'Home', home_path %>
</li>
Run Code Online (Sandbox Code Playgroud)