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不是我的实例,ApplicationController而是从 ember 本身生成的控制器,我不明白为什么(我ApplicationController的定义在app/controllers/application.js...

有没有人知道这种行为,或者可以告诉我正确的方向来以某种方式追踪这个错误?

4

1 回答 1

2

因此,我深入研究了这个错误,并在GitHub 项目中发现了一个问题,该问题描述了我认为正是我的问题。

事实证明,Ember App Kit(甚至 Ember 本身)以某种方式吞下了由Ember.assert等引发的消息/错误,因此我遵循了 Stefan Penner 的建议并切换到暂停在我的浏览器开发工具中捕获的异常,我看到它是不是一个,而是几个错误!

不幸的是,所有这些错误都静默失败,直到无法再捕获最后一个错误,这就是为什么每个错误都显示相同的堆栈跟踪...

所以,解决方案似乎是确保pause on caught exceptions并追踪错误消息Ember.assert()......是否有其他人看到同样的问题并且有其他一些建议或可以批准我的结论?


Chrome 开发工具中“捕获异常时暂停”的屏幕截图:

在此处输入图像描述

于 2014-03-27T15:09:16.563 回答