События — это то, что срабатывает, когда что-то происходит с классом. Например, когда кнопка нажата или до / после рендеринга элемента.
Методы написания событий
Ниже приведены методы написания событий.
- Встроенные события с использованием слушателей.
- Присоединение событий позже
- Пользовательские события
Встроенные события с использованием слушателей
Sencha Touch предоставляет свойство слушателя для записи событий и пользовательских событий в файлах Sencha Touch.
Написание слушателя в Sencha Touch
Мы добавим слушателя в предыдущую программу, добавив свойство listen на панель, показанную ниже:
<!DOCTYPE html> <html> <head> <link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" /> <script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script> <script type = "text/javascript"> Ext.application({ name: 'Sencha', launch: function() { Ext.create('Ext.Panel', { html: 'My Panel', fullscreen: true, listeners: { painted: function() { Ext.Msg.alert('I was painted to the screen'); } } }); } }); </script> </head> </html>
Это даст следующий результат —
Таким образом, мы также можем написать несколько событий в свойстве слушателей.
Несколько событий в одном слушателе
<!DOCTYPE html> <html> <head> <link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" /> <script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script> <script type = "text/javascript"> Ext.application({ name: 'Sencha', launch: function() { var myButton = Ext.Viewport.add({ xtype: 'button', centered: true, text: 'Click me' }); myButton.on({ tap: function() { var randomWidth = 100 + Math.round(Math.random() * 200); this.setWidth(randomWidth); }, widthchange: function(button, newWidth, oldWidth) { alert('My width changed from ' + oldWidth + ' to ' + newWidth); } }); } }); </script> </head> </html>
Это даст следующий результат —
Прикрепление события позже
В предыдущем методе записи событий мы записывали события в слушатели во время создания элементов.
Другой способ прикрепить события заключается в следующем —
<!DOCTYPE html> <html> <head> <link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" /> <script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script> <script type = "text/javascript"> Ext.application({ name: 'Sencha', launch: function() { var myButton = Ext.Viewport.add({ xtype: 'button', centered: true, text: 'Click me' }); myButton.on('tap', function() { alert("Event listener attached by .on"); }); } }); </script> </head> </html>
Это даст следующий результат —
Пользовательские события
Мы можем записывать пользовательские события в Sencha Touch и запускать события с помощью метода fireEvent. В следующем примере объясняется, как писать пользовательские события.
<!DOCTYPE html> <html> <head> <link href = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/resources/css/sencha-touch.css" rel = "stylesheet" /> <script type = "text/javascript" src = "https://cdn.sencha.com/touch/sencha-touch-2.4.2/sencha-touch-all.js"></script> <script type = "text/javascript"> Ext.application({ name: 'Sencha', launch: function() { var myButton = Ext.Viewport.add({ xtype: 'button', centered: true, text: "Just wait 5 seconds", listeners: { myEvent: function(button, points) { alert('myEvent was fired! You score ' + points + ' points'); } } }); Ext.defer(function() { var number = Math.ceil(Math.random() * 100); myButton.fireEvent('myEvent', myButton, number); }, 5000); } }); </script> </head> </html>
Когда страница загружена и документ готов, появится страница пользовательского интерфейса с кнопкой, и когда мы запускаем событие через 5 секунд, как только документ будет готов, через 5 секунд появится окно предупреждения.
Здесь мы написали пользовательское событие ‘myEvent’ и запускаем события как button.fireEvent (eventName);