2011-02-04 67 views
1

在應用現有的Ext JS代碼,組合框被重寫這樣的:extjs combo override:爲什麼要定義this.addevents()?

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' 
     ); 

}}) 

爲什麼我們需要定義:

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

「變」已經被定義爲一個事件對於extjs中的組合框。 'clear'在extjs中沒有定義。

編輯:也許實際例子參考幫助:這是。 http://www.sencha.com/forum/showthread.php?84300-Nullable-ComboBox&p=404222&langid=14

+0

確實。定義`change`有點奇怪,因爲無論如何它都會繼承`Ext.form.Field`。就「明確」而言,也許它正在其他地方使用。 JavaScript給了你一個討厭的可能性來傳播你的定義,所以它可能並不明顯。 – Mchl 2011-02-04 21:04:30

回答

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); 
    }) 

所以這兩個事件被稱爲只有一個傳遞的參數(即組合框本身)。我不認爲有必要在這裏定義change事件,因爲它是從Ext.form.Field繼承的。此外,繼承的change事件的簽名是(field, newValue, oldValue),而此處僅傳遞一個參數。因此,我認爲這個事件應該使用另一個名字。