2011-02-04 4 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' 
      ); 

«изменение» уже определено как событие для combobox в extjs. 'clear' не определен в extjs.

EDIT: Может быть, ссылка на фактический пример поможет: вот оно. http://www.sencha.com/forum/showthread.php?84300-Nullable-ComboBox&p=404222&langid=14

+0

Действительно. Определение 'change' немного странно, так как оно наследуется в любом случае feom' Ext.form.Field'. Что касается 'clear', возможно, он используется в другом месте. 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); 
    }) 

Так как события называются только один аргумент передается (будучи сам) поле со списком. Я не думаю, что здесь необходимо определить событие change, так как оно унаследовано от Ext.form.Field. Также сигнатурой унаследованного события change является (field, newValue, oldValue), тогда как здесь передается только один аргумент. Из-за этого, я думаю, для этого события нужно использовать другое имя.

Смежные вопросы