2012-02-10 7 views
4

ExtJS 4.0.7을 사용 중이며 Ext에 익숙하지 않고 새로운 MVC 아키텍처를 사용 중입니다. 나는 변화에 따라 더 많은 UI 요소를 드러내 기 위해 RadioGroup을 사용하고 싶습니다. 문제는 변경 이벤트가 RadioGroup에 대해 두 번 발생한다는 것입니다. 두 라디오가 값을 변경하는 이벤트를 발생시키기 때문에 이것이라고 가정합니다.ExtJS 4 RadioGroup 이벤트 변경 두 번 발생

한 번만 발사되는 같은 이름의 라디오 그룹 또는 라디오로 수신 대기하는 방법이 있습니까? jQuery와 Flex에 대한 경험으로, 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의 선택은 새로운 값이됩니다. 나는 두 가지 사건 발사 문제를 해결하지 못한다는 것을 알고 있지만 잘하면이 도움이된다!

+0

버그 및 해결 방법이므로이 문제를 받아들이고 있습니다. 감사. –

0

는 그가 트리거 여기

내보기에서을 radioGroup 코드입니다 행사. 세 번째 라디오 요소를 추가하고 세 번 발사되는지보십시오.

+0

4 개의 항목이있는 다른 라디오 그룹에서했습니다. 그것은 두 번 발사됩니다. 일단 새로 선택한 라디오 값이 변경되었다고 말하면 한 번 말해서 이전 라디오 값이 checked = false로 변경되었음을 알려줍니다. –

4

두 번 발사 한 이유는 라디오 그룹에 두 가지 변화가 일어나기 때문입니다.

라디오 버튼이 checked=true에서 checked=false으로 변경되고 새로 클릭 한 라디오 버튼이 checked=false에서 checked=true으로 변경됩니다. 이것은 실제로 예상되는 것이어야합니다.

라디오 버튼을 더 이상 선택하지 않은 상태에서 무언가를하고 싶다면 어떻게해야합니까? 그 모든 사건을 그리워 할거야. 정말로 checked=true이있는 라디오 버튼 만 듣기 위해 청취자 기능을 점검해야합니다.

+0

이것도 제가 사용한 솔루션이지만 그룹의 라디오 버튼에 대해 알고 싶지는 않습니다.라디오 그룹은 이론적으로 하나의 가치와 하나의 사건을 제공해야합니다. –

0

이 시도 :

여기 myTransitionsRadio 내 경우에는
change : function(thisFormField, newValue, oldValue, eOpts) { 
      if (!Ext.isArray(newValue.myTransitionsRadio)) { 
       // Code goes here. 
      } 

모든 라디오 버튼에 주어진 일반적인 이름입니다.

감사 Nagendra