2013-04-22 16 views
6

Yani, bir giriş denetleyicisi var tıklayın fare farklıdır, böyle, Enter tuşuna fare veya basınla giriş tıklayabilirsiniz Giriş düğmesine tıklamak için fareyi onButton düzgün çalışır, button.up() bana Login window döndürür.ExtJs elle Click olayı ateş, düğme param

Ancak, Enter tuşuna basıldığında ve onButton yangınları kadar bu durumda fireEvent('click') yapmak onKey fonksiyonunu, ateşler ama eğer parametre button Eğer fare tarafından tıkladığınızda button parametre alınan aynı DEĞİL! Ve bu kez, button.up() işlevi tanımlanmamış.

Soru, neden fireEvent('click') bana farklı bir düğme parametresi veriyor?

cevap

14

Böyle fireEvent işlevini kullanmalısınız:

var myBtn = Ext.getCmp('#idLogin button'); 

myBtn.fireEvent('click', myBtn); 

Bir deneyin.

+1

Teşekkür ederim: D spot ve çok hızlı @! – Tom

+0

Rica ederim, kabul etmekten çekinmeyin. – Patrick

+0

neden 'button.click()' yoktur? – Geo

7

Düğme tıklama olayı, çerçeve tarafından tetiklenen sentetik bir olay olduğu için. Düğme örneği ve bir olay nesnesi boyunca geçer. fireEvent, "bu olayın gerçekleştiği aboneleri bu argümanlarla" altta yatan düğmede bir tıklama olayını tetiklemez "anlamına gelir.

Yani kullanmanız gerekir:

button.fireEvent('click', button);

Ancak bu gerçekten mantıklı değil sadece fazladan bir katman ekliyoruz.

Neden dışarı değil soyut:

Ext.define('My.controller.Login', { 
    extend: 'Ext.app.Controller', 

    init: function(application) { 
     this.control({ 
      "#idLogin button": {click: this.onButton}, 
      "#idLogin form > *": {specialkey: this.onKey} 
     }); 
    }, 

    onButton: function(button, e, eOpts) { 
     this.doWindowFoo(); 
    }, 

    onKey: function (field, el) { 
     if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login 
      this.doWindowFoo(); 
    }, 

    doWindowFoo: function() { 
     // Assumes the window has an id idLogin, there are several other ways to get a reference 
     var win = Ext.getCmp('idLogin'); 
    } 
}); 
+0

Detaylı cevap için çok teşekkür ederim! Hintli kısa bir XD ile 60 saniye boyunca yendi – Tom

+1

Cevap "yanlış", düğmede bir olay ateş etmemelisiniz. Bunu yapmanın doğru yolu değil. –

+0

EvanT, ondan XD'yi kabul etmekten hoşnut değil, ama en iyi uygulamada işlevleri yeniden yapılandırmaya daha da derinleştiğine katılıyorum. Katmanları düzleştirdin. Ben 10 + Şerefe verebilseydim! ~ – Tom

3

Kullanım:

var button= Ext.getCmp('#idLogin button');  
button.fireHandler(); 
+0

"fireHandler" özel bir işlevdir ve güvenilmemelidir: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.button.Button-method-fireHandler – BillyTom

0

daha genel bir yol:

document.querySelector("what-ever-el-selector").click(); 

ExtJS 4.2.6

Şerefe

üzerinde test edilmiştir
İlgili konular