当使用Spine.js控制器堆栈没有添加“主动”类('active' class n

2019-07-30 09:56发布

我有两个非常简单的Spine.js控制器:

class ListController extends Spine.Controller
    className: 'list'
    constructor: () ->
        super

class DetailController extends Spine.Controller
    className: 'detail'
    constructor: () ->
        super

控制器堆栈

class Application extends Spine.Stack
    className: 'mystack'
    controllers:
         list: ListController
         detail: DetailController

和相应的HTML标记

<div class="mystack">
    <div class="list">list</div>
    <div class="detail">detail</div>
</div>

我的问题是,当控制器栈实例

app = new Application()
app.list.active()

没有active添加到类div.list元件。 div的保持不变。

有什么不好呢?

Answer 1:

我刚刚拿到了它,所以我将介绍基本工作示例。 有与上面的代码的几个问题(由于我的Spine.js控制器堆栈是如何工作的误解:-)

首先,适当的HTML元素必须与由堆栈管理的每个控制器相关联。 当控制器栈实例化控制器它仅通过stack (即本身)实例作为参数来构造。 所以控制器构造必须考虑到这一点(例如,像下面的):

class ListController extends Spine.Controller
    constructor: (parameters) ->
        @stack = parameters.stack
        @el = $ @stack.settings.listSelector
        super

class DetailController extends Spine.Controller
    constructor: (parameters) ->
        @stack = parameters.stack
        @el = $ @stack.settings.detailSelector
        super

和栈:

class Application extends Spine.Stack
    settings:
        listSelector: '.list'
        detailSelector: '.detail'
    controllers:
        list: ListController
        detail: DetailController
    default:
        'list'

那么控制器堆可以被实例化:

app = new Application
    el: $ '.mystack'

ListController将被激活(即对应div已经active类加)默认情况下,随时随地以后你可以叫@stack.detail.active()@stack.list.active()从控制器实例的方法来激活所需的控制器和“隐藏” (即除去active类)的其它(一个或多个)。

编辑:我们与@ aschmid00讨论了这个问题。 事实上,控制器构造不必设置自有物业@stack手动。 当被称为基本构造它是自动完成的super 。 但是,在这个问题的情况下@el有叫由于事件代表团等基础构造设置



文章来源: 'active' class not added when Spine.js controller stack used