有些代码按顺序执行顺序:
最初,我不认为第一步的事件会被第2步中设置的事件处理程序捕获。但是,看起来我的假设是错误的。
所以我的想法是尝试在dojo.connect之前获取所有事件并杀死所有事件,然后dojo.connect无法使事件处理程序捕获先前发生的事件。
是否有可能像dojo.stopAllEvent这样的东西?完成后,我的dojo.connect代码将正确地忽略不必要的事件。
提前致谢。
答案 0 :(得分:0)
虽然我不知道标题问题的答案,但我以为我会在onChange奇怪的事情上发声。
我会假设和你一样,但事实证明,当你设置表单小部件的值时,onChange
事件会被超时触发。来自dijit.form._FormWidget
:
// setTimout allows hidden value processing to run and
// also the onChange handler can safely adjust focus, etc
this._onChangeHandle = setTimeout(dojo.hitch(this,
function(){
this._onChangeHandle = null;
this.onChange(newValue);
}), 0); // try to collapse multiple onChange's fired faster than can be processed
这意味着您的第2步继续并在事件实际触发之前附加第二个onChange
侦听器。你可以做些什么来解决你的问题,就是使用set
方法的第三个参数。
yourFormWidget.set("value", myNewValue, false);
第三个参数称为priorityChange,当设置为false时,不会触发onChange事件。希望有所帮助。 (感谢#dojo上的kgf教我:-))
答案 1 :(得分:0)
如果您的实际问题只是如何避免在连接事件之前“听到”set
来电的变化,那么一个潜在的答案基本上就在我告诉他之前转发过的Frode中。
dijit.form._FormWidget
通过超时触发onChange
,这基本上确保它只在当前函数链完成执行后才会触发。因此,目前你的connect
最终实际上“赢得”了onChange
射击的比赛,这是你不想要的。但是,您应该能够通过同样在超时内执行实际连接来强制它“丢失”。
示例:http://jsfiddle.net/kfranqueiro/ur8tf/
当然,如果Frode的建议足以满足您的目的,那么它的眼睛可能会更容易。