我有两个非常简单的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的保持不变。
有什么不好呢?
我刚刚拿到了它,所以我将介绍基本工作示例。 有与上面的代码的几个问题(由于我的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
有叫由于事件代表团等基础构造前设置