【问题标题】:Setting the current active tab in a bootstrap menu在引导菜单中设置当前活动选项卡
【发布时间】:2016-06-24 18:46:37
【问题描述】:

我在部分中定义了以下引导菜单(药丸):

<ul class="nav nav-pills">
  <li class="active"><a href="#">Home</a></li>
  <li><a href="#">Menu 1</a></li>
  <li><a href="#">Menu 2</a></li>
</ul>

以下是一些示例路线:

  get 'institute/:institute_id/students' => 'students#index'   , as: 'students_of_institute'
  get 'students/:student_id'             => 'students#show'

我在各种视图中都引用了这个部分。如何动态更改当前活动选项卡?

【问题讨论】:

  • 你需要匹配当前路径或路由。如果您可以提供定义路线的示例,则可以更轻松地决定走哪条路。理想情况下,您希望在以编程方式定义的路线上进行匹配 - 在路径上进行匹配会更麻烦
  • 确保使用 JS 初始化 Bootstrap 选项卡。演示 - codepen.io/anon/pen/yJgbqE?editors=1010
  • 这颗宝石可能会对你有所帮助 - github.com/comfy/active_link_to
  • 我添加了一些我的 rotues

标签: ruby-on-rails twitter-bootstrap ruby-on-rails-4


【解决方案1】:

您必须检查当前路径,如果它与您的链接匹配,请将 active 类添加到您的 li

比较params[:controller]params[:action] 是一种简单的方法。

例如:

# GET /posts
params[:controller]     => "posts"
params[:action]         => "index"

这是一个“肮脏”的例子。最好把它移到某个助手那里:

<ul class="nav nav-pills">

  <li class="<%= 'active' if params[:controller] == 'students' && params[:action] == 'index' %>"><%= link_to 'Students', students_path %></li>

</ul>

【讨论】:

  • 不确定我是否关注了你。如果可能的话,请您根据我的路线提供一些示例代码。这段代码放在哪个文件中?
【解决方案2】:

@Uzbekjon 解决方案的替代方法是使用 current_page? 辅助方法。第一个参数是控制器,第二个(可选)是动作。

由于您的导航链接将是顶级链接,您通常不需要指定操作。这样,您仍然可以在同一控制器中为子页面提供有效的药丸。

例如:

<ul class="nav nav-pills">
  <li class="<%= 'active' if current_page? controller: :students %>">
    <%= link_to 'Students', students_path %>
  </li>
</ul>

我认为这更优雅一些。

【讨论】:

  • 这也是一个不错的方法。谢谢!
  • 这个解决方案似乎只适用于控制器的索引页面。如何让它在控制器范围内的所有页面上工作?
  • @Wes 我现在很少使用 Rails,但请留下一个例子来说明你的意思。我想如果您查找 current_page? 方法的 API,您将能够探索您的选项 api.rubyonrails.org/classes/ActionView/Helpers/…
猜你喜欢
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多