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.Elementarayüzü kullanmak istersiniz . Olay işleyicileri atamak amacıyla Element.addListenerve Element.on(bunlar eşdeğerdir) oluşturulmuştur. Öyleyse, örneğin, html'ye sahipsek:
<div id="test_node"></div>
ve clickolay işleyicisi eklemek istiyoruz .
Hadi geri alalım Element:
var el = Ext.get('test_node');
Şimdi clickolay 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.Observablemixin kullanılarak gerçekleştirilir . Olayları düzgün bir şekilde işleyebilmek için, widget'ınız bir karışım Ext.util.Observableolarak içermelidir . Tüm yerleşik widget'ların (Panel, Form, Ağaç, Izgara, ... gibi) Ext.util.Observablevarsayı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, Buttonwidget oluşturalım ve clickona 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);
}
}
});
ButtonWidget'ın özel bir tür widget olduğuna dikkat edin . Tıklama etkinliği, handleryapı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', /* ... */);
addEventsYö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, initComponentyeni 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 falseveya 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();
});