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()
ご覧のとおり、2 番目の引数を定義して を呼び出すだけです(これにより、変更イベントがトリガーされます)。
したがって、この種の動作を変更する唯一の方法は、必要なメソッドをオーバーライドして自分で実装することです。例えば:
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
とのみを実装しましたdijit/form/TextBox
)、チケットを開いて実装されることを祈るしかありません。