2012-02-10 16 views
4

私はExtJS 4.0.7を使用していますが、Extには新しく、新しいMVCアーキテクチャを使用しています。私はRadioGroupを持っています。変更すると、より多くのUI要素を明らかにするために使いたいと思っています。問題は、変更イベントがRadioGroupに対して2回発生することです。私は、両方のRadiosが値を変更するためのイベントを発生させるため、これが想定されています。ExtJS 4 RadioGroupイベントの変更が2回発生する

RadioGroupまたはラジオのいずれかに変更を聞く方法はありますか?同じ名前のラジオは1回だけ発火しますか? 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'); 
} 
+0

確認された([フィドル](http://jsfiddle.net/molecule/4sTQQ/))。バグのように見えます。 –

+0

これは回避策ではありません。私はバグのショーケースを作成しただけです。 –

+0

申し訳ありませんが、私が投稿したものについて話していました。回避策:セレクタを '#WheatChoice radio'に変更し、イベントリスナーのロジックを使用してtrue以外の新しい値を無視します。 –

答えて

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つのイベント発射の問題を解決しないことを知っているが、うまくいけば、これは役立ちます!

+0

バグであり、回避策が働いているので、私はこれを受け入れています。ありがとう。 –

0

は初期値が設定されているので、それは解雇される可能性がありますし、それが引き金イベント。 3番目のラジオ要素を追加して3回発火するかどうか試してみてください。

+0

4つのアイテムを持つ別のラジオグループでやりました。 2回発射する。一度、新しく選択された無線の値が変更されたことを伝えて、古い無線の値がchecked = falseに変更されたことを一度教えてください。 –

4

2回発射される理由は、ラジオグループに2つの変更があるためです。

ラジオボタンがchecked=trueからchecked=falseに変更され、新しくクリックされたラジオボタンがchecked=falseからchecked=trueに変更されています。これは本当に期待されるべきことです。

ラジオボタンがチェックされなくなったときに何かしたいのですが?あなたはそのイベント全体を欠場するでしょう。実際には、リスナー機能のチェックをして、checked=trueのラジオボタンだけを聞く必要があります。

+0

これは私が雇用している解決策ですが、私はグループ内の両方のラジオボタンについて知りたいとは思っていません。RadioGroupは、理論的には、1つの値と1つのイベントを提供する必要があります。 –

0

はこれを試してみてください:

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

ここmyTransitionsRadio私の場合は、すべてのラジオボタンに与えられた一般的な名称です。

おかげNagendra

関連する問題