DOM öğelerinin olay işlemesini açıklayarak başlayalım.
DOM düğümü olay işleme
Her şeyden önce doğrudan DOM düğümü ile çalışmak istemezsiniz. Bunun yerine, muhtemelen Ext.Element
arayüzü kullanmak istersiniz . Olay işleyicileri atamak amacıyla Element.addListener
ve Element.on
(bunlar eşdeğerdir) oluşturulmuştur. Öyleyse, örneğin, html'ye sahipsek:
<div id="test_node"></div>
ve click
olay işleyicisi eklemek istiyoruz .
Hadi geri alalım Element
:
var el = Ext.get('test_node');
Şimdi click
olay için dokümanlara bakalım . İşleyicinin üç parametresi olabilir:
(Ext.EventObject e, HTMLElement t, Object eOpts) öğesine tıklayın
Tüm bunları bilerek işleyici atayabiliriz:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
Widget olay yönetimi
Widgets olay işleme, DOM düğümleri olay işlemeye oldukça benzer.
Her şeyden önce, widget olay işleme Ext.util.Observable
mixin kullanılarak gerçekleştirilir . Olayları düzgün bir şekilde işleyebilmek için, widget'ınız bir karışım Ext.util.Observable
olarak içermelidir . Tüm yerleşik widget'ların (Panel, Form, Ağaç, Izgara, ... gibi) Ext.util.Observable
varsayılan olarak bir karışımı vardır .
Widget'lar için işleyici atamanın iki yolu vardır. İlki - yöntem (veya ) üzerinde kullanmaktır addListener
. Örneğin, Button
widget oluşturalım ve click
ona olay atayalım . Öncelikle eylemcinin argümanları için olayın belgelerine bakmalısınız:
(Ext.button.Button, Event e, Object eOpts)
Şimdi kullanalım on
:
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button'
});
myButton.on('click', function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
});
İkinci yol, widget'ın dinleyici yapılandırmasını kullanmaktır :
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
listeners : {
click: function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
}
});
Button
Widget'ın özel bir tür widget olduğuna dikkat edin . Tıklama etkinliği, handler
yapılandırma kullanılarak bu widget'a atanabilir :
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
Özel olayların tetiklenmesi
Öncelikle addEvents yöntemini kullanarak bir etkinlik kaydetmeniz gerekir :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
addEvents
Yöntemi kullanmak isteğe bağlıdır. Bu yönteme ilişkin yorumların söylediği gibi, bu yöntemi kullanmaya gerek yoktur, ancak olay dokümantasyonu için yer sağlar.
Etkinliğinizi başlatmak için fireEvent yöntemini kullanın :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
işleyiciye aktarılacaktır. Şimdi etkinliğinizi halledebiliriz:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
AddEvents yöntem çağrısını eklemek için en iyi yerin, initComponent
yeni pencere öğesini tanımlarken widget'ın yöntemi olduğunu belirtmekte fayda var :
Ext.define('MyCustomButton', {
extend: 'Ext.button.Button',
// ... other configs,
initComponent: function(){
this.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
// ...
this.callParent(arguments);
}
});
var myButton = Ext.create('MyCustomButton', { /* configs */ });
Olay köpürmesini önleme
Köpürmeyi önlemek için yapabilir return false
veya kullanabilirsiniz Ext.EventObject.preventDefault()
. Tarayıcının varsayılan eylemini önlemek için Ext.EventObject.stopPropagation()
.
Örneğin düğmemize tıklama olay işleyicisi atayalım. Ve sol düğme tıklanmadıysa, varsayılan tarayıcı eylemini engelleyin:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});