【问题标题】:Sammy.js navigation menuSammy.js 导航菜单
【发布时间】:2013-01-16 12:32:49
【问题描述】:

我正在使用 sammy.js,并试图为我的 SPA 构建一个不错的菜单。我的 HTML 结构如下所示:

<nav class="navMain">
  <ul class="nav">
    <li class="active"><a href="/#/">Home</a></li>
    <li><a href="/#aroute">A route</a></li>
    <li><a href="/#anotherroute">Anouther route</a></li>
  </ul>
</nav>
<div class="main">
  <!-- here goes everything I do with sammy -->
</div>

当然,我想做的是将active 类提供给路由到该页面的其他菜单项。到目前为止,我没有找到任何例子,我想出了这个:

this.bind('run-route', function() {
  var path = this.params.path;      
  $('.navMain li').removeClass('active').find('a[href*="' + path + '"]').parent().addClass('active');
});

在工作时,这似乎不是解决这个非常常见问题的好方法。我想一定有更简单和惯用的东西,但我找不到任何东西。

谁能指出更好的解决方案?

【问题讨论】:

    标签: client-side sammy.js single-page-application


    【解决方案1】:

    更新路由处理程序代码中的类,它知道您现在在哪个路由上,并且可以在列表中找到它。

    对于这个标记:

    <nav class="navMain">
      <ul class="nav">
        <li class="active"><a href="#/">Home</a></li>
        <li><a href="#/aroute/">A route</a></li>
        <li><a href="#/anotherroute/">Anouther route</a></li>
      </ul>
    </nav>
    

    这里是 JS:

    function SetActiveLink(name){
        var ul = $('ul')
    
        ul.children().removeClass('active')
    
        ul.find('a[href="#/'+name+'/"]').parent().addClass('active')
    }
    
    sammyapp.route('get','#/a/', function() {
        SetActiveLink('a')
    })
    
    sammyapp.route('get','#/b/', function() {
        SetActiveLink('b')
    })
    

    【讨论】:

    • 非常感谢您的回答!也许我不完全理解它,但是我上面发布的解决方案有什么好处?这个看起来更不干燥和惯用?
    • 您的版本看起来不错。我选择我的版本的唯一原因是“显式” - 此列表中的第 2 行 python.org/dev/peps/pep-0020
    猜你喜欢
    • 2013-11-04
    • 2013-01-23
    • 2021-04-10
    • 1970-01-01
    • 2018-02-14
    • 2017-05-23
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多