【发布时间】: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 中经常遇到这个问题,并希望有比编辑源代码更好的方法。
【问题讨论】:
-
@JoseM 这比我所希望的要好:) 你应该把它作为答案发布。
标签: javascript dojo javascript-debugger