ExtJS 4 RadioGroup меняет событие дважды - PullRequest
4 голосов
/ 10 февраля 2012

Я использую ExtJS 4.0.7, я новичок в Ext и использую новую архитектуру MVC. У меня есть RadioGroup, которую я хочу использовать после изменения, чтобы раскрыть больше элементов пользовательского интерфейса. Проблема в том, что событие изменения запускается дважды для RadioGroup. Я предполагаю, что это потому, что оба радио запускают событие для изменения их значений.

Есть ли способ прослушать изменение радиогруппы или радио с тем же именем, которое сработает только один раз? В моем опыте работы с jQuery и Flex я ожидал, что RadioGroup будет запускаться только один раз.

Вот код RadioGroup на мой взгляд:

items: [{
    xtype: 'radiogroup',
    id: 'WheatChoice',
    padding: '',
    layout: {
        padding: '-3 0 4 0',
        type: 'hbox'
    },
    fieldLabel: 'Choose Model',
    labelPad: 5,
    labelWidth: 80,
    allowBlank: false,
    columns: 1,
    flex: 1,
    anchor: '60%',
    items: [
        { xtype: 'radiofield', id: 'SpringWheat', padding: '2 10 0 0', fieldLabel: '', 
          boxLabel: 'Spring', name: 'wheat-selection', inputValue: '0', flex: 1 },
        { xtype: 'radiofield', id: 'WinterWheat', padding: '2 0 0 0', fieldLabel: '',
          boxLabel: 'Winter', name: 'wheat-selection', inputValue: '1', checked: true, flex: 1 }
     ]
}]

Вот соответствующий код в моем контроллере:

init: function() {
     this.control({
         '#WheatChoice': {
            change: this.onWheatChange
         }
     });
},

onWheatChange: function(field, newVal, oldVal) {
    //this fires twice
    console.log('wheat change');
}

Ответы [ 4 ]

5 голосов
/ 11 февраля 2012

http://www.sencha.com/forum/showthread.php?132176-radiogroup-change-event-fired-twice/page2

evant говорит, что это будет исправлено в 4.1, так что это определенно ошибка.

Однако вы можете справиться с ситуацией довольно легко:

//borrowing your function
onWheatChange: function(rg, sel) {
    var selection = sel['wheat-selection'];

    if (!(selection instanceof Object)) {
        alert(selection);
    }

}  

var selection будет новым значением. Я знаю, что это не решает проблему запуска двух событий, но, надеюсь, это поможет!

4 голосов
/ 10 февраля 2012

Причина, по которой он срабатывает дважды, заключается в том, что в вашей радиогруппе происходят два изменения.

Радиокнопка меняется с checked=true на checked=false, а затем только что выбранная вами радиокнопка меняется с checked=false на checked=true. Это действительно должно быть ожидаемой вещью.

Что если вы хотите что-то сделать, когда радио-кнопка больше не проверяется? Вы бы пропустили все это событие. На самом деле вы должны просто проверить функцию прослушивателя, чтобы прослушивать только радиокнопку, которая имеет checked=true.

0 голосов
/ 13 марта 2012

Попробуйте это:

change : function(thisFormField, newValue, oldValue, eOpts) {
          if (!Ext.isArray(newValue.myTransitionsRadio)) {
                 // Code goes here.
          }

Здесь myTransitionsRadio в моем случае - это общее имя, присвоенное всем переключателям.

Спасибо Nagendra

0 голосов
/ 10 февраля 2012

Это может быть вызвано тем, что устанавливается начальное значение, и это вызывает событие.Попробуйте добавить третий радиоэлемент и посмотрите, сработает ли он три раза.

...