いくつかのプロジェクトを3.0.0にアップグレードしましたが、そのうちの1つは問題ありませんが、 transitionTo
を呼び出すと、もう1つはエラーをスローします。
router.js:1011 Uncaught Error: More context objects were passed than there are dynamic segments for the route: projects
at NamedTransitionIntent.applyToHandlers (router.js:1011)
at NamedTransitionIntent.applyToState (router.js:940)
at Router.getTransitionByIntent (router.js:1229)
at Router.transitionByIntent (router.js:1348)
at doTransition (router.js:1947)
at Router.transitionTo (router.js:1418)
at Class._doTransition (router.js:561)
at Class.transitionTo (routing.js:18)
at session.save.then.s (session.js:104)
at tryCatcher (rsvp.js:215)
問題はapplyToHandlers
にあるようです:
var objects = this.contexts.slice(0);
// ...
if (objects.length > 0) {
throw new Error('More context objects were passed than there are dynamic segments for the route: ' + targetRouteName);
}
デバッガーでそれを見ると、何らかの理由でこれを2回実行しているように見えます。最初のパスでは、 objects
は[]
です(ここには動的セグメントがないため)。 2番目は[undefined]
で、長さの検証に失敗します。
他のアプリではこの問題が発生しないので、Emberでエッジケースに遭遇したのか、ここで自分のコードに問題が発生したのかわかりません。これをさらに調べることができます。
うーん、それはおそらくあなたのセットアップに関連しているようです(これは他の人から報告されていません)、私たちが追跡しやすくするために、より小さなデモアプリで分離してみてください?
少し調べてみると、これはプライベートルーティングサービスrouting: service('-routing')
を使用したサービスでのみ発生することがわかりました。
router: service()
に置き換えると問題が解決しますが、これが文書化されている場所はありますか? パブリックルーターサービスはまだ来ていないという印象を受けました。
最も参考になるコメント
少し調べてみると、これはプライベートルーティングサービス
routing: service('-routing')
を使用したサービスでのみ発生することがわかりました。router: service()
に置き換えると問題が解決しますが、これが文書化されている場所はありますか? パブリックルーターサービスはまだ来ていないという印象を受けました。