3

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  

誰か説明してくれませんか、どこが問題なのですか?

4

2 に答える 2

4

私はあなたが与えた情報に基づいてしか答えることができません... エラーに関してはuncaught Error: assertion failed: Could not find state for path、これはパス「/」に一致するリーフ状態がないためです。

root.indexは「/」に一致しますが、リーフではなく、子の状態が 1 つあるbatchesため、ルーターは の子で「/」に一致するものを探します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何かを行う必要がある場合は、2 番目の方法を使用して、移行前にビジネスを処理することをお勧めします。root.indexroot.batchestransitionTo

于 2012-11-30T18:59:40.050 に答える
0

私はあなたが何をしたいのかを理解しようとしていますが、見た目から、あなたは/batches/にルーティングしroot.index.batches.index/batchesにルーティングしたいと考えていますroot.index.batches。あれは正しいですか?

私の理解では、あなたroot.index.batchesroot.index.batches.indexルートは実際には同じルートです。後者を削除すると、うまくいくはずです。

于 2012-11-30T15:41:35.820 に答える