2

既存の Ember.js プロジェクトを移行して使用しようとしましたが、Ember App Kitここでは発生しないと思われる奇妙なエラーが表示されます...

アプリを起動すると、すべてが初期化され、ユーティリティ クラスが起動して実行され、Ajax リクエストが送受信されます。すべて問題ないようです。しかし、その後、同じエラーが何度も発生し続けます。

Uncaught TypeError: Cannot read property 'name' of undefined

StackTrace をたどると、エラーがのupdatePaths()関数で発生することがわかりましたRouter(コードが失敗し始める行にコメントしました:

function updatePaths(router) {
  var appController = router.container.lookup('controller:application');

  if (!appController) {
    // appController might not exist when top-level loading/error
    // substates have been entered since ApplicationRoute hasn't
    // actually been entered at that point.
    return;
  }

  var infos = router.router.currentHandlerInfos, // <-- empty Array ([])
      path = Ember.Router._routePath(infos); // <-- empty String ("")

  if (!('currentPath' in appController)) {
    defineProperty(appController, 'currentPath');
  }

  set(appController, 'currentPath', path);

  if (!('currentRouteName' in appController)) {
    defineProperty(appController, 'currentRouteName');
  }

  set(appController, 'currentRouteName', infos[infos.length - 1].name); // throws Uncaught TypeError: Cannot read property 'name' of undefined
}

スタックトレースは次のとおりです。

Uncaught TypeError: Cannot read property 'name' of undefined      ember.js:35015
updatePaths                                                       ember.js:35015
Ember.Router.Ember.Object.extend.intermediateTransitionTo         ember.js:34522
(anonymous function)                                              ember.js:34919
forEachRouteAbove                                                 ember.js:34869
defaultActionHandlers.loading                                     ember.js:34915
triggerEvent                                                      ember.js:34983
trigger                                                           ember.js:34116
Transition.trigger                                                ember.js:33952
Ember.Router.Ember.Object.extend._fireLoadingEvent                ember.js:34750
DeferredActionQueues.flush                                        ember.js:5893
Backburner.end                                                    ember.js:5984
Backburner.run                                                    ember.js:6023
Ember.run                                                         ember.js:6426
runInitialize                                                     ember.js:39637
jQuery.Callbacks.fire                                             jquery.js:3063
jQuery.Callbacks.self.fireWith                                    jquery.js:3175
jQuery.extend.ready                                               jquery.js:3381
completed                                                         jquery.js:3397

また、appControllerは のインスタンスではなく、ApplicationControllerember 自体から生成されたコントローラーのようで、理由がわかりません (myは...ApplicationControllerで定義されています)。app/controllers/application.js

誰かがこの動作について何か知っているか、このエラーを追跡するための正しい方向を教えてくれますか?

4

1 に答える 1

2

それで、私はこのエラーをより深く掘り下げ、GitHub プロジェクトで問題を見つけました。これは、まさに私の問題でもあると考えていたことを説明しています。

どういうわけか、Ember App Kit (または Ember 自体) がスローされたメッセージ/エラーなどを飲み込んでいることが判明したEmber.assertため、Stefan Penner の提案に従い、ブラウザーの開発ツール内でキャッチされた例外で一時停止するように切り替えました。 1つではなく、いくつかのエラー!

残念ながら、最後のエラーがキャッチできなくなるまで、これらのエラーはすべてサイレントに失敗します。これが、すべてのエラーが同じスタック トレースを示した理由です...

したがって、解決策は次pause on caught exceptionsのエラーメッセージを確実に追跡することEmber.assert()です...他の誰かが同じ問題を見て、他の提案がありますか、それとも私の結論を承認できますか?


Chrome Dev Tools の「キャッチされた例外で一時停止」のスクリーンショット:

ここに画像の説明を入力

于 2014-03-27T15:09:16.563 に答える