4

私は ExtJS 4.0.7 を使用しており、Ext は初めてで、新しい MVC アーキテクチャを使用しています。変更時に、より多くの UI 要素を表示するために使用したい RadioGroup があります。問題は、RadioGroup に対して change イベントが 2 回発生することです。これは、両方のラジオが値を変更するためのイベントを発生させるためだと思います。

一度だけ起動する同じ名前の RadioGroup または Radios への変更をリッスンする方法はありますか? jQuery と Flex での私の経験では、RadioGroup は 1 回だけ起動すると予想していました。

私の見解では 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

4 に答える 4

5

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 選択が新しい値になります。2 つのイベント発火の問題が解決しないことはわかっていますが、これが役立つことを願っています。

于 2012-02-10T22:30:31.060 に答える
4

2 回発生する理由は、ラジオ グループで 2 つの変更が発生しているためです。

ラジオ ボタンが からchecked=trueに変わりchecked=false、新しくクリックしたラジオ ボタンが からchecked=falseに変わりますchecked=true。これは本当に想定内のはずです。

ラジオボタンがチェックされなくなったときに何かをしたい場合はどうしますか? あなたはそのイベント全体を見逃すでしょう。実際には、リスナー関数をチェックして、 を持つラジオボタンのみをリッスンする必要がありますchecked=true

于 2012-02-10T18:20:42.390 に答える
0

初期値が設定されており、それがイベントをトリガーするため、発生している可能性があります。3 つ目の無線要素を追加して、3 回発火するかどうかを確認してください。

于 2012-02-10T14:42:03.267 に答える
0

これを試して:

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

ここで myTransitionsRadio は、すべてのラジオ ボタンに付けられた共通の名前です。

ありがとうナゲンドラ

于 2012-03-13T18:41:22.093 に答える