到目前为止,没有办法阻止在调用reset()
函数时触发 onChange 事件,查看代码,当您使用时发生的情况dijit/form/Form::reset()
是它将调用该reset()
表单的每个后代小部件的函数:
reset: function(){
array.forEach(this._getDescendantFormWidgets(), function(widget){
if(widget.reset){
widget.reset();
}
});
},
重置功能(至少所有从 继承的表单小部件_dijit/form/_FormValueMixin
)是这样实现的:
reset: function(){
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, true);
}
如您所见,它只是调用_setValueAttr()
定义的第二个参数(触发更改事件)。
因此,改变这种行为的唯一方法是通过重写必要的方法来实现它。例如:
var MyForm = declare("my/Form", [ Form ], {
reset: function(priorityChange) {
array.forEach(this._getDescendantFormWidgets(), function(widget){
if(widget.reset) {
widget.reset(priorityChange);
}
});
}
});
var myTextBox = declare("my/TextBox", [ TextBox ], {
reset: function(priorityChange) {
this._hasBeenBlurred = false;
this._setValueAttr(this._resetValue, priorityChange);
}
});
这允许您添加一个调用函数的参数priorityChange
,reset()
该参数允许您触发(或不触发)事件。
一个完整的例子可以在 JSFiddle 上找到:http: //jsfiddle.net/f954z/
如果您不想重新实现reset()
所有表单小部件的功能(我只做过dijit/form/Form
and dijit/form/TextBox
),那么您能做的最好的事情就是打开一张票并希望它得到实现。