Spine.js - 如何设置嵌套堆栈

时间:2013-06-07 10:27:48

标签: spine.js

我正在尝试在Spine.js中设置嵌套堆栈。

虽然我复制粘贴了似乎适用于其他人的代码(https://gist.github.com/MikeSilvis/2839845)并调整了控制器&型号名称不起作用。 两个堆栈都显示正确,控制台中也没有错误。但是 - 如果我没有完全误解嵌套堆栈的使用 - 它们不嵌套在根堆栈中。我必须在视图中添加一些内容吗?

index.coffee:

class App extends Spine.Controller

  constructor: ->
    super
    new Spine.SubStack
    Spine.Route.setup()

    @append(@groups = new App.Groups)
    @append(@people = new App.People)

class App.Root extends Spine.Stack
  $.fn.item = ->
    elementID   = $(@).data('id')
    elementID or= $(@).parents('[data-id]').data('id')
    Person.find(elementID)
  controllers:
    groups: App.Groups
    people: App.People

  routes:
    '/groups' : 'groups'
    '/people' : 'people'

  default: 'people'
  className: 'stack root'

class Spine.SubStack extends Spine.Stack

  constructor: ->
    for key,value of @routes
      console.log [key, value].join(" | ")
      do (key,value) =>
        @routes[key] = =>
          @active()
          @[value].active(arguments...)
    super

window.App = App

in groups.coffee:

class App.Groups extends Spine.SubStack
  controllers:
    index: Index
    edit:  Edit
    show:  Show
    new:   New

  routes:
    '/groups/new':      'new'
    '/groups/:id/edit': 'edit'
    '/groups/:id':      'show'
    '/groups':          'index'

  default: 'index'
  className: 'stack groups'

in people.coffee:

class App.People extends Spine.SubStack
  controllers:
    index: Index
    edit:  Edit
    show:  Show
    new:   New

  routes:
    '/people/new':      'new'
    '/people/:id/edit': 'edit'
    '/people/:id':      'show'
    '/people':          'index'

  default: 'index'
  className: 'stack people'

添加此代码后,所有路由仍然有效,但没有根堆栈。

希望有一点经验的人可以帮助我摆脱这个问题!

1 个答案:

答案 0 :(得分:0)

如果不进行太多研究,您似乎应该在某处new App.Rootextends App.Root。这可以解释为什么你的路由正在工作,但没有根堆栈。