【问题标题】:debugging dojo widget events - setTimeout vs the callstack调试 dojo 小部件事件 - setTimeout 与调用堆栈
【发布时间】:2014-05-21 04:34:34
【问题描述】:

通常,我会向 dojo 小部件添加一个事件处理程序。例如,更改事件的处理程序。然后,我的代码中的某些内容将触发更改事件 - 但我不知道是什么。因此,通常您只需在您最喜欢的调试器中设置一个断点,然后查看调用堆栈,您就可以快速跟踪导致事件触发的原因。但是,我的活动调用堆栈通常在 dojo 的 lang.hitch 结束,我猜这是因为 dojo 将函数传递给 window.setTimeout,因此当函数在js 事件队列。

这是一个小的可执行示例。

<b id="cb"></b>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js"></script>
<script>
require(["dijit/form/CheckBox", "dojo/domReady!"], function(CheckBox){
    var checkBox = new CheckBox({
        onChange: function(b){
            console.log(b);
        }
    }, "cb");

    // manually trigger change event.
    // i want to be able to see this line in the debuggers call stack.
    checkBox.set("checked", true);
});
</script>

有没有一种简单的方法可以克服这个恼人的调试障碍?可能是通过 setTimeout 告诉 dojo 不要执行事件处理程序的设置?

在这种情况下,_WidgetBase.js defer() 似乎是调用 setTimeout 的那个,但我知道我在 dojo 中经常遇到这个问题,并希望有比编辑源代码更好的方法。

【问题讨论】:

标签: javascript dojo javascript-debugger


【解决方案1】:

Chrome Canary(构建 35 及更高版本)现在能够调试异步 javascript,这正是您正在尝试做的事情。见文章Debugging Asynchronous JavaScript with Chrome DevTools

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 2012-02-02
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2012-06-26
    相关资源
    最近更新 更多