Ember.js:如何追踪延迟的动作运行时错误?

时间:2013-12-25 10:18:23

标签: javascript debugging ember.js

我偶尔会遇到以下运行时错误。

Assertion failed: Error while loading route: TypeError: Cannot call method 'get' of undefined ember.js?body=1:3226
    (anonymous function) ember.js?body=1:3226
    defaultActionHandlers.error ember.js?body=1:32032
    triggerEvent ember.js?body=1:31884
    trigger ember.js?body=1:30910
    Transition.trigger ember.js?body=1:30131
    handleError ember.js?body=1:31244
    invokeCallback ember.js?body=1:8377
    (anonymous function) ember.js?body=1:8431
    EventTarget.trigger ember.js?body=1:8200
    (anonymous function) ember.js?body=1:8502
    DeferredActionQueues.flush ember.js?body=1:5674
    Backburner.end ember.js?body=1:5765
    Backburner.run ember.js?body=1:5804
    executeTimers ember.js?body=1:6056
    (anonymous function) ember.js?body=1:5914

问题是整个调用堆栈是ember代码。但错误必须由我的代码引起。

确定导致问题的原始代码的一般方法是什么?

1 个答案:

答案 0 :(得分:0)

将调试器设置为在所有异常上停止,然后向上走堆栈跟踪并找出你的代码正在触发它。

这个特殊的错误看起来像你正在转换到另一条路线并且它爆炸了。在过渡过程中只发生了一些事情(主要的轻描淡写),我会指出会破坏过渡的大元素,它们都位于路线上。

  1. 重写了model hook
  2. 重写了setupController hook
  3. 重写了serialize hook
  4. 您需要查看代码,并在调用get之前添加一个项目存在的验证,或者切换到使用Ember.get(obj, property),但这只会推迟您的异常直到稍后。< / p>

    我在setupControllerserialize挂钩中看到了很多错误。

    serialize: function(model){
      // good spot to fail
      return { custom_id: model.get('some_id') };
    }
    
    setupController: function(controller, model){
      // good spot to fail
      var something = model.get('something');
    }
    

    这些特定区域涉及更大的问题,您的模型钩子(或transitionTo / transitionToRoute代码)正在传递null / empty模型。