2011-02-04 1 views
1

는 콤보 상자는 다음과 같이 오버라이드 (override)되어extjs 콤보 오버라이드 : this.addevents()를 정의하는 이유는 무엇입니까? 응용 프로그램에서 기존 내선 JS 코드에서

this.addEvents(
       'clear', 
       'change' 
      ); 

'변화'이미 이벤트로 정의된다

Ext.override(Ext.form.ComboBox, { 
    nullable:true 
    ,initComponent: Ext.form.ComboBox.prototype.initComponent.createSequence(function(){ 
     this.triggerConfig = { 
      tag:'span', cls:'x-form-twin-triggers', cn:[ 
       {tag: "img", src: Ext.BLANK_IMAGE_URL, cls:'x-form-trigger '}, 
       {tag: "img", src: Ext.BLANK_IMAGE_URL, cls:'x-form-trigger x-form-clear-trigger'} 
     ]}; 
     this.addEvents(
      'clear', 
      'change' 
     ); 

}}) 

왜 우리가 정의 할 필요합니까 extobs에서 콤보 박스 용. 'clear'는 extj에 정의되어 있지 않습니다.

편집 : 실제 예제를 참조하면 도움이 될 것입니다. 여기 있습니다. http://www.sencha.com/forum/showthread.php?84300-Nullable-ComboBox&p=404222&langid=14

+0

실제로. 'change' 정의는 조금 이상합니다. Ext.form.Field'라는 어쨌든 상속되기 때문입니다. '분명히'가는 한, 어쩌면 다른 곳에서 사용되고있을 수도 있습니다. JavaScript는 정의를 퍼뜨릴 수있는 불쾌한 가능성을 제공하므로 명확하지 않을 수 있습니다. – Mchl

답변

1

당신이 정의이 방법이 있다고 볼 수 있습니다 : 그래서 두 이벤트가 전달 된 하나의 인수 (있는 콤보 상자 자체)로 불리는

clearValue:Ext.form.ComboBox.prototype.clearValue.createSequence(function(){ 
     if(this.trigger_clear){ 
      this.trigger_clear.hide(); 
     } 
     this.fireEvent('clear', this); 
     this.fireEvent('change', this); 
    }) 

가. Ext.form.Field에서 상속되었으므로 여기서 change 이벤트를 정의 할 필요가 없다고 생각합니다. 또한 상속 된 change 이벤트의 시그니처는 (field, newValue, oldValue)이지만 여기서는 하나의 인수 만 전달됩니다. 그 때문에이 이벤트에는 다른 이름을 사용해야한다고 생각합니다.

관련 문제