javascript-Ember.js路由器和initialState中的嵌套路由

我正在尝试了解emeber.js路由.我不太确定,为什么这不是路由器的有效定义

Platby.Router = Ember.Router.extend   
  location: 'hash'   
  enableLogging : true

  root: Ember.Route.extend
    index: Ember.Route.extend
      route: '/'
      initialState: 'batches'
      enter: (router) -> console.log 'root.index'

      batches: Ember.Route.extend
        initialState: 'index'
        route: '/batches'
        enter: (router) -> console.log 'root.index.batches'

        index: Ember.Route.extend
          route: '/'
          enter: (router) -> console.log 'root.index.batches.index'

转到根URL后,我将在控制台中获得以下输出.

STATEMANAGER: Entering root
STATEMANAGER: Sending event 'navigateAway' to state root.
STATEMANAGER: Sending event 'unroutePath' to state root. 
STATEMANAGER: Sending event 'routePath' to state root. 
Uncaught Error: assertion failed: Could not find state for path  

有人可以向我解释,问题出在哪里?

解决方法:

我只能根据您提供的信息来回答…关于未捕获的错误错误:断言失败:找不到路径状态,这是因为您没有与路径“ /”匹配的叶子状态.

root.index匹配’/’,但不是叶子,它具有单个子状态批处理,因此路由器将在root.index的子代中查找’/’的匹配项,但找不到它仅查找批次(匹配“ / batches”),并引发错误.必须有一个与路由路径匹配的叶子.

至于帮助您实际尝试做的事情,看起来您想让“ /”重定向到“ / batches”吗?如果是这样的话:

Platby.Router = Em.Router.extend
  root: Em.Route.extend
    index: Em.Route.extend
      route: '/'
      redirectsTo: 'batches'
    batches: Em.Route.extend
      route: '/batches'
      connectOutlets: ...

您可以按上述方式使用redirectsTo,这是以下操作的快捷方式:

Platby.Router = Em.Router.extend
  root: Em.Route.extend
    index: Em.Route.extend
      route: '/'
      connectOutlets: (router) ->
        router.transitionTo('batches')
    batches: Em.Route.extend
      route: '/batches'
      connectOutlets: ...

但是,您不能使用redirectsTo并拥有自己的connectOutlets,因此,如果在转换到root.batches之前需要在root.index中执行任何操作,则需要使用第二种方法并在transitionTo之前处理业务

上一篇:javascript-JSON ParseError即使请求成功


下一篇:javascript-根据放置在其中的内容调整EpicEditor的大小