เริ่มต้นด้วยการอธิบายการจัดการเหตุการณ์ขององค์ประกอบ DOM
การจัดการเหตุการณ์โหนด DOM
ก่อนอื่นคุณไม่ต้องการทำงานกับโหนด DOM โดยตรง แต่คุณอาจต้องการใช้Ext.Element
อินเทอร์เฟซแทน เพื่อวัตถุประสงค์ในการกำหนดตัวจัดการเหตุการณ์Element.addListener
และElement.on
(สิ่งเหล่านี้เทียบเท่า) ถูกสร้างขึ้น ตัวอย่างเช่นหากเรามี html:
<div id="test_node"></div>
และเราต้องการเพิ่มclick
ตัวจัดการเหตุการณ์
มาเรียกดูElement
:
var el = Ext.get('test_node');
ตอนนี้มาตรวจสอบเอกสารสำหรับclick
เหตุการณ์ ตัวจัดการอาจมีพารามิเตอร์สามตัว:
คลิก (Ext.EventObject e, HTMLElement t, Object eOpts)
เมื่อรู้สิ่งเหล่านี้แล้วเราสามารถกำหนดตัวจัดการได้:
// event name event handler
el.on( 'click' , function(e, t, eOpts){
// handling event here
});
การจัดการเหตุการณ์วิดเจ็ต
การจัดการเหตุการณ์วิดเจ็ตค่อนข้างคล้ายกับการจัดการเหตุการณ์โหนด DOM
ประการแรกการจัดการเหตุการณ์วิดเจ็ตเกิดขึ้นได้จากการใช้Ext.util.Observable
mixin เพื่อที่จะจัดการกับเหตุการณ์ต่างๆได้อย่างถูกต้องวิดเจ็ตของคุณจะต้องExt.util.Observable
เป็นมิกซ์อิน วิดเจ็ตในตัวทั้งหมด (เช่น Panel, Form, Tree, Grid, ... ) มีExt.util.Observable
เป็น mixin โดยค่าเริ่มต้น
สำหรับวิดเจ็ตมีสองวิธีในการกำหนดตัวจัดการ อันแรก - ใช้กับ method (หรือaddListener
) ยกตัวอย่างเช่นสร้างButton
วิดเจ็ตและกำหนดclick
เหตุการณ์ให้ ก่อนอื่นคุณควรตรวจสอบเอกสารของเหตุการณ์เพื่อหาอาร์กิวเมนต์ของตัวจัดการ:
คลิก (Ext.button Button this, Event e, Object eOpts)
ตอนนี้มาใช้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);
});
วิธีที่สองคือใช้การกำหนดค่าListenersของวิดเจ็ต:
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
วิดเจ็ตเป็นวิดเจ็ตชนิดพิเศษ เหตุการณ์การคลิกสามารถกำหนดให้กับวิดเจ็ตนี้ได้โดยใช้handler
config:
var myButton = Ext.create('Ext.button.Button', {
text: 'Test button',
handler : function(btn, e, eOpts) {
// event handling here
console.log(btn, e, eOpts);
}
});
เหตุการณ์ที่กำหนดเองเริ่มทำงาน
ก่อนอื่นคุณต้องลงทะเบียนเหตุการณ์โดยใช้เมธอดaddEvents :
myButton.addEvents('myspecialevent1', 'myspecialevent2', 'myspecialevent3', /* ... */);
การใช้addEvents
วิธีนี้เป็นทางเลือก ตามความคิดเห็นของวิธีนี้บอกว่าไม่จำเป็นต้องใช้วิธีนี้ แต่เป็นสถานที่สำหรับเอกสารเหตุการณ์
ในการเริ่มกิจกรรมของคุณให้ใช้วิธีfireEvent :
myButton.fireEvent('myspecialevent1', arg1, arg2, arg3, /* ... */);
arg1, arg2, arg3, /* ... */
จะถูกส่งผ่านไปยังตัวจัดการ ตอนนี้เราจัดการกิจกรรมของคุณได้แล้ว:
myButton.on('myspecialevent1', function(arg1, arg2, arg3, /* ... */) {
// event handling here
console.log(arg1, arg2, arg3, /* ... */);
});
เป็นมูลค่าการกล่าวขวัญว่าสถานที่ที่ดีที่สุดสำหรับการแทรกการเรียกเมธอดaddEventsคือinitComponent
วิธีการของวิดเจ็ตเมื่อคุณกำหนดวิดเจ็ตใหม่:
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 */ });
ป้องกันเหตุการณ์เดือด
เพื่อป้องกันไม่ให้เดือดปุด ๆ ที่คุณสามารถหรือการใช้งานreturn false
Ext.EventObject.preventDefault()
เพื่อป้องกันการใช้การกระทำเริ่มต้นของเบราว์เซอร์Ext.EventObject.stopPropagation()
เพื่อที่จะป้องกันการใช้การดำเนินการเริ่มต้นของเบราว์เซอร์
ตัวอย่างเช่นกำหนดตัวจัดการเหตุการณ์คลิกให้กับปุ่มของเรา และหากไม่คลิกปุ่มซ้ายจะป้องกันการทำงานของเบราว์เซอร์เริ่มต้น:
myButton.on('click', function(btn, e){
if (e.button !== 0)
e.preventDefault();
});