- Ext.js 教程
- Ext.js - 首頁
- Ext.js - 概述
- Ext.js - 環境設定
- Ext.js - 命名規範
- Ext.js - 架構
- Ext.js - 第一個程式
- Ext.js - 類系統
- Ext.js - 容器
- Ext.js - 佈局
- Ext.js - 元件
- Ext.js - 拖放
- Ext.js - 主題
- Ext.js - 自定義事件和監聽器
- Ext.js - 資料
- Ext.js - 字型
- Ext.js - 樣式
- Ext.js - 繪製
- Ext.js - 本地化
- Ext.js - 可訪問性
- Ext.js - 除錯程式碼
- Ext.js - 方法
- Ext.js 有用資源
- Ext.js - 問答
- Ext.js - 快速指南
- Ext.js - 有用資源
- Ext.js - 討論
Ext.js - 自定義事件和監聽器
事件是在類發生某些事情時觸發的。例如,當按鈕被點選或元素渲染之前/之後。
編寫事件的方法
- 使用監聽器內建事件
- 稍後附加事件
- 自定義事件
使用監聽器內建事件
Ext JS 提供了 listener 屬性用於在 Ext JS 檔案中編寫事件和自定義事件。
在 Ext JS 中編寫監聽器
我們將透過向面板新增 listen 屬性,在之前的程式中新增監聽器。
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
click: function() {
Ext.MessageBox.alert('Alert box', 'Button is clicked');
}
}
});
});
</script>
</head>
<body>
<p> Please click the button to see event listener </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
以上程式將產生以下結果:
透過這種方式,我們也可以在 listeners 屬性中編寫多個事件。
同一監聽器中的多個事件
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
Ext.get('tag2').hide()
Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
click: function() {
this.hide();
},
hide: function() {
Ext.get('tag1').hide();
Ext.get('tag2').show();
}
}
});
});
</script>
</head>
<body>
<div id = "tag1">Please click the button to see event listener.</div>
<div id = "tag2">The button was clicked and now it is hidden.</div>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
稍後附加事件
在之前編寫事件的方法中,我們在建立元素時在 listeners 中編寫了事件。另一種方法是附加事件。
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
var button = Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button'
});
// This way we can attach event to the button after the button is created.
button.on('click', function() {
Ext.MessageBox.alert('Alert box', 'Button is clicked');
});
});
</script>
</head>
<body>
<p> Please click the button to see event listener </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
以上程式將產生以下結果:
自定義事件
我們可以在 Ext JS 中編寫自定義事件,並使用 fireEvent 方法觸發事件。以下示例說明了如何編寫自定義事件。
<!DOCTYPE html>
<html>
<head>
<link href = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/classic/theme-neptune/resources/theme-neptune-all.css"
rel = "stylesheet" />
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/extjs/6.0.0/ext-all.js"></script>
<script type = "text/javascript">
Ext.onReady(function() {
var button = Ext.create('Ext.Button', {
renderTo: Ext.getElementById('helloWorldPanel'),
text: 'My Button',
listeners: {
myEvent: function(button) {
Ext.MessageBox.alert('Alert box', 'My custom event is called');
}
}
});
Ext.defer(function() {
button.fireEvent('myEvent');
}, 5000);
});
</script>
</head>
<body>
<p> The event will be called after 5 seconds when the page is loaded. </p>
<div id = 'helloWorldPanel' /> <!-- panel will be rendered here-- >
</body>
</html>
頁面載入並文件準備就緒後,將顯示帶有按鈕的 UI 頁面,並且由於我們在 5 秒後觸發事件,因此文件已準備就緒。警報框將在 5 秒後出現。
這裡,我們編寫了自定義事件“myEvent”,並且我們正在觸發事件,如 button.fireEvent(eventName);
廣告