在活动页面上更改html状态类的最佳方法

时间:2012-06-15 01:28:54

标签: node.js towerjs

我正在测试2个示例项目,一个是快速的,另一个是塔式.js

我只是想在页面渲染的开头将正确的css类放在活动页面的li上。

例如:

我在页面/信息中,我想在第一个li

上添加活动类

  • 信息
  • 其他
  • 我使用的模板引擎是Coffekup / Jade

    我试图获取url路径并与href进行比较,通过当地人传递......但我认为这不是通过当地人传递的好方法..

    有更好的解决方案吗?

    感谢。

    1 个答案:

    答案 0 :(得分:0)

    这个答案适用于towerjs和coffeekup。我没有足够的经验和快递和玉说什么。

    在coffeekup中,将诸如css类之类的属性放在html标记上的正确方法是使用哈希,即attributeName: atrributeValue。一个例子,来自处理主要布局的tower.js模板,它位于app/views/layouts/application.coffee中:

        nav id: "navigation", class: "navbar", role: "navigation", ->
          div class: "navbar-inner", ->
            div class: "container", ->
              partial "shared/navigation"
    

    请注意,这里我们有三层标签,一个带嵌套在其中的div的导航,另一个嵌套在那个内部的div,后面是要在其中渲染的内容。它可以像文本一样容易,而不是局部的。

    所以,在你的情况下,你进入app/views/info并找到你想要上课的li的正确模板,那么它就是

    li class: "active", ->
    

    现在,如果你正在谈论在已经被动态渲染的情况下更改li上的css类,你需要从客户端代码执行此操作,并且你可以像使用coffeescript一样会在普通的html页面中使用javascript。

    如果你正在尝试学习塔和coffeekup(现在实际上是咖啡杯),我真的推荐https://github.com/mark-hahn/coffeekup-intro。您可以在不到半小时的时间内完成它,并对咖啡杯有一个很好的理解。如果您想查看有解释的Towerjs应用程序示例,可以在此处查看我的demoApp:https://github.com/edubkendo/demoApp

    编辑:现在回答我理解的问题:

    首先,在config/assets.coffee中,在第一个块中添加"/app/client/controllers/applicationController",如下所示:

    module.exports =
      javascripts:
        application: [
          "/app/client/config/application"
          "/config/routes"
          "/app/views/templates"
          "/app/models/user"
          "/app/client/controllers/usersController"
          "/app/models/post"
          "/app/client/controllers/postsController"
          "/app/client/controllers/applicationController"
    ]
    

    然后,在您的客户端控制器中,app/client/controllers/applicationController.coffee

    class App.ApplicationController extends Tower.Controller
    
      pathname = window.location.pathname
    
      pathRegExp = new RegExp(pathname.replace(/\/$/,'') + "$")
    
      $('.navbar a').each(->
        if (pathRegExp.test @href.replace(/\/$/,''))
          $(@).addClass('active')
        )
    

    现在,这将把活动类添加到当前活动的链接。