gpt4 book ai didi

javascript - 调试 dojo 小部件事件 - setTimeout 与调用堆栈

转载 作者:行者123 更新时间:2023-12-02 17:22:44 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

关于javascript - 调试 dojo 小部件事件 - setTimeout 与调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23774014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com