我正在Ruby on Rails中构建一个静态网站,我有一个 application.html.erb 文件,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BayEquities</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<%= render "layouts/shim" %>
</head>
<body>
<%= render "layouts/header" %>
<div class="container">
<%= yield %>
</div>
</body>
</html>
<script type="text/javascript">
$(function() {
$('.navbar .nav > li > a').click(function(e){
$('.navbar .nav > li.active').removeClass('active')
$(this).parent('li').addClass('active')
});
});
</script>
目前,此代码会添加活动类并相应地删除它。唯一的问题是每次点击新的导航栏链接时,标题部分(下面的代码)会重新加载。因此,每次点击后将活动类应用于“Home”。
_header.html.erb
<header class="navbar">
<div class="navbar-inner">
<a class="brand" id="logo">Bay Equities</a>
<ul class="nav">
<li class="active"><%= link_to "Home", "index" %></li>
<li><%= link_to "Services", "services" %></li>
<li><%= link_to "Contact Us", "contact" %></li>
</ul>
</div>
</header>
我提前为匆忙的格式化工作道歉,感谢所有的帮助!
答案 0 :(得分:13)
您是否考虑将此逻辑移至rails?
例如,您可以设置一个辅助方法,根据params [:action]分配活动类。
module ApplicationHelper
def is_active(action)
params[:action] == action ? "active" : nil
end
end
然后在你的部分主页链接中:
<li class="<%=is_active('home')%>"><%= link_to "Home", "index" %></li>
<li class="<%=is_active('services')%>"><%= link_to "Services", "services" %></li>
<li class="<%=is_active('contact')%>"><%= link_to "Contact Us", "contact" %></li>
答案 1 :(得分:-1)
在 application_helper.rb
中添加以下类
def current_class_by(path:)
return 'active' if request.path == path ''
end
菜单链接看起来像这样。
<%= link_to(dashboard_path, class: "nav-link #{current_class_by(path: dashboard_path)}") do %>
<i class="nav-icon __icon-tachometer"></i>
<p><%= t('dashboard_admin.menus.dashboard') %></p>
<% end %>