调试Ember.js错误:加载路由时出错

时间:2013-12-26 21:27:19

标签: ember.js

虽然在任何特定情况下都有关于如何调试错误的提示和线索,但我还没有找到一个通用的Ember策略。
例如,加载路径时出现typeError:
Assertion failed: Error while loading route: TypeError: 'undefined' is not an object (evaluating 'window.router.lander')(忽略我尝试访问window.router.lander的事实。它无关紧要)

为什么Ember在发生此错误时不会告诉您加载哪条路线?或者它是发生在afterModel()还是activate()?什么是找到那种情境信息的一般策略?

到目前为止,我所拥有的只是添加了一堆分散在各处的console.logs。例如,上面的错误:
1)在我的代码中找到所有出现的window.router.lander 2)在第一次出现之前,添加一个console.log('它是第一次出现?'),并在第一次出现后放入console.log('它不是第一次出现') 39)
3)每次出现都这样做 4)刷新。其中一个是第n次出现?'没有更接近,现在你知道错误发生在哪里。

2 个答案:

答案 0 :(得分:2)

为了更好地进行调试,您可以通过带有LOG_TRANSITIONS和/或LOG_TRANSITIONS_INTERNAL属性的创建应用启用转换日志记录:

window.App = Ember.Application.create({
  // Basic logging, e.g. "Transitioned into 'post'"
  LOG_TRANSITIONS: true, 

  // Extremely detailed logging, highlighting every internal
  // step made while transitioning into a route, including
  // `beforeModel`, `model`, and `afterModel` hooks, and
  // information about redirects and aborted transitions
  LOG_TRANSITIONS_INTERNAL: true
});

参考:http://emberjs.com/guides/understanding-ember/debugging/

此外,您可以使用canary build提供详细的错误堆栈: http://emberjs.com/builds/#/canary

答案 1 :(得分:1)

当涉及到模型钩子中的错误或它返回的承诺时,Ember并不是特别有用。我确信我已经读过其中一个问题(或http://discuss.emberjs.com/我不确定)这是一个他们正在工作的公开问题。

我所做的是使用Chrome开发者工具调试问题(而不仅仅是控制台登录)。根据我的经验,它通常是:

  1. 你没有在模型钩子中返回任何东西
  2. 模型挂钩返回的承诺中的then函数之一内的错误
  3. 我希望它可以帮到你!