【问题标题】:SpineJS stack doesn't add active class to controllersSpineJS 堆栈不会向控制器添加活动类
【发布时间】:2013-07-26 00:35:41
【问题描述】:
Spine = require('spine')
Welcome = require('controllers/welcome')
Signup = require('controllers/signup')

class Main extends Spine.Stack
  controllers:
    welcome: Welcome
    signup: Signup

  default: 'signup'

  routes:
    '/welcome': 'welcome'
    '/signup': 'signup'

module.exports = Main

welcomesignup 控制器只是渲染一个视图,以便我了解堆栈的工作原理:

Spine = require('spine')

class Welcome extends Spine.Controller
  className: 'welcome'

  constructor: ->
    super
    @active @render

  render: ->
    console.log 'welcome render function'
    @html require('views/welcome')()

module.exports = Welcome

然后根据 stack docs,我将其添加到我的 css 中:

.stack > *:not(.active) {
  display: none
}

我故意让注册控制器执行@navigate('/welcome'),而不是渲染其视图以查看我将如何控制堆栈。 Welcome 的渲染函数中的 console.log 语句确实被调用了,但是 Welcome 的 <div> 没有添加 active 类,并且由于上面的 CSS,没有显示。

我已经重读了几次文档,用谷歌搜索了一遍,我不确定我错过了什么。为什么没有将活动类添加到欢迎 el 中?

【问题讨论】:

  • 我将这个问题缩小到我的一个控制器的构造函数,该控制器将一个函数绑定到 active 事件,并且该绑定函数实际被调用,这发生在堆栈激活默认控制器之前。跨度>
  • 我意识到了一种更好的方法来做我想做的事情 - 我覆盖了我的堆栈的构造函数:构造函数: -> super if @verify_user() then @navigate('/welcome' ) 否则 @navigate('signup')

标签: spine.js


【解决方案1】:

我怀疑问题在于您调用render 作为active 事件的一部分,这是在添加类之后发生的。由于render 调用@html,它将替换添加了该类的HTML。

顺便说一句,对于 Spine,我发现阅读源代码会有很大帮助。这是一个很小的框架。栈的相关代码见https://github.com/spine/spine/blob/dev/src/manager.coffee

【讨论】:

  • 感谢您的想法,但我不认为就是这样。我尝试只在构造函数中渲染视图,没有任何改变。此外,Contacts 示例对主堆栈中的 Show 和 Edit 控制器执行相同的操作 - 将渲染绑定到活动事件 (spinejs.com/docs/example_contacts)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2011-01-03
  • 2015-11-15
  • 1970-01-01
相关资源
最近更新 更多