Это все еще ошибка с версии 4.0.7.Вот короткое переопределение, чтобы исправить это:
Ext.override(Ext.form.field.Radio, {
resetOriginalValue: function () {
//Override the original method inherited from Ext.form.field.Field:
// this.originalValue = this.getValue();
// this.checkDirty();
this.getManager().getByName(this.name).each(function (item) {
item.originalValue = item.getValue();
item.checkDirty();
});
}
});
(Вы также можете прочитать обсуждение и мой оригинальный ответ в ветке форума Sencha здесь: http://www.sencha.com/forum/showthread.php?182524-RadioField-and-isDirty-problem&p=745308&viewfull=1#post745308)
Research /детали:
Начните с источника для Ext.form.Basic, метод setValues. Внутри метода setValues есть вспомогательная функция setVal, которая выглядит следующим образом:
function setVal(fieldId, val) {
var field = me.findField(fieldId);
if (field) {
field.setValue(val);
if (me.trackResetOnLoad) {
field.resetOriginalValue();
}
}
}
Вы можете видеть этовызывает setValue для первого поля, которое находит по заданному fieldId (имя поля), а затем resetOriginalValue. Давайте посмотрим на setValue в Ext.form.field.Radio:
setValue: function(v) {
var me = this,
active;
if (Ext.isBoolean(v)) {
me.callParent(arguments);
} else {
active = me.getManager().getWithValue(me.name, v).getAt(0);
if (active) {
active.setValue(true);
}
}
return me;
}
Этот специализированный метод setValue учитывает, что существует несколько радиостанций с одним и тем же именем , и что setValue вызывается только для одного из них (первый найден путем вызова findField в setValues базовой формы).
Итак, setValue для радиополя сделано «умным». Теперь, что насчет resetOriginalValue для радиополя? Специализированный resetOriginalValue для радиополя никогда не был реализован -просто наследуется от значения по умолчанию в Ext.form.field.Field, которое выглядит следующим образом:
resetOriginalValue: function() {
this.originalValue = this.getValue();
this.checkDirty();
}
Исправление заключается в том, чтобы сделать resetOriginalValue для радио столь же «умным», как их setValue, т.е. принять во внимание, чтов группе радиостанций есть несколько полей с одним и тем же именем.