新手问题 关于 Bootstrap nav-pill active 属性问题

deathking · 2014年10月30日 · 最后由 5swords 回复于 2014年11月01日 · 8656 次阅读

现在我有这样的胶囊式导航栏,我是用 active_link_to 来判断按钮与当前页面的关系,并生成相应的 active 属性。

我想说的是,每次生成这个 nav,就要调用 7 次 active_link_to 这个 helper,感觉很费时,而且也很不必要。

有什么跟好的解决办法吗?(先不考虑 DRY 的问题)

<ul class="nav nav-pills">
  <%= active_link_to fa_icon('home', text: ' 课程主页', class: 'fa-fw fa-lg'), home_course_path(@course), wrap_tag: :li %>
  <%= active_link_to fa_icon('files-o', text: ' 课件资料', class: 'fa-fw fa-lg'), docs_course_path(@course), wrap_tag: :li  %>
  <%= active_link_to fa_icon('comments-o', text: ' 讨论专区', class: 'fa-fw fa-lg'), forum_course_path(@course), wrap_tag: :li  %>
  <%= active_link_to fa_icon('edit', text: ' 课程作业', class: 'fa-fw fa-lg'), assmt_course_path(@course), wrap_tag: :li  %>
  <%= active_link_to fa_icon('book', text: ' 课程维基', class: 'fa-fw fa-lg'), wiki_course_path(@course), wrap_tag: :li  %>
  <%= active_link_to fa_icon('group', text: ' 成员', class: 'fa-fw fa-lg'), members_course_path(@course), wrap_tag: :li  %>
  <%= active_link_to fa_icon('gears', text: ' 课程管理', class: 'fa-fw fa-lg'), admin_course_path(@course), wrap_tag: :li  %>
</ul>

自顶一下

自己再封装一个 helper 呗,比如:

def nav_course_link(icon, text, course)
  ....
end

不过也没方便多少。

可以再考虑把 icon, text, course 封装到一个结构里面,然后 iterate 这个结构。

感觉怎么写都差不多,代码的复杂度我觉得是不会变化多少的,只是代码从这里搬迁到另外一个地方。 但对于可维护性上来说要好一些吧

- @menus = [{icon: 'home', text: ' 课程主页', url: home_course_path(@course)}...]
<ul class="nav nav-pills">
  <%= render partial: 'share/menus', collection: @menus, as: :menu %>
</ul>

@menus可能出自配置文件,数据库等。

这样会好一点?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号