目的: V80201 – [編審狀態]異動時, 依目前編審狀態改變 radioGroup選項
處理說明: 1>[編審狀態]欄位的 EditPick 的 isSuspendevent 必需設為 false,當[編審狀態]欄位異動時, change event 才會觸發
2>設定 radio1.setCheck(true);
目的: V80201 – [編審狀態]異動時, 依目前編審狀態改變 radioGroup選項
處理說明: 1>[編審狀態]欄位的 EditPick 的 isSuspendevent 必需設為 false,目的: V20107 – 編輯畫面 – [件號]欄位離開時 , 自動取得件號名稱 - listeners - blur
目的: V20107 – Master[存檔]完成,自動新增 4 筆Detail資料並重新顯示 Detail資料
處理說明: 1>fireEvent("eventName", event_param1,event_param2,event_param3,...);
Ex: selectionchange( this, selected, eOpts )
傳入參數如下:
this : Ext.selection.Model
selected : Ext.data.Model[] , The selected records
eOpts : Object
--> fireEvent("selectionchange",this,selected,eOpts);0
Ex: Ext.getCmp('grid_M').fireEvent("selectionchange", Ext.getCmp("grid_M").getSelectionModel(),cur_recs);
//先執行 Template 的 onClick , 再執行 V20107 的 onClick
Ext.getCmp('btn_save').on('click', function () {
//若 checkFormValue 有問題,則 is_Keepgoing=false , 不往下執行
if (is_keepgoing==false)
return ;
console.log('step 1 click_btn_save of V20107');
if (!check_AMM_WKSTPD_isnull()) {
console.log("if !check_AMM_WKSTPD_isnull() , return ");
return ; // AMM_WKSTPD 已有資料,不新增 4筆資料
}
//若 AMM_WKSTPD 為空值,則詢問是否為系統件維修,
//若是,則 INSERT_AMM_WKSTPD4 ,寫入 4筆資料
console.log("3 詢問是否為系統件維修嗎?");
var Tmp_Msg = "本交修件為系統件維修嗎 ?";
Ext.Msg.confirm('確認', Tmp_Msg, callBackFunc);
function callBackFunc(id) {
console.log("1 callBackFunc : 本交修件為系統件維修嗎 ?");
if (id == 'no')
return;
//insert 四筆資料 AMM_WKSTPD
var np = {};
np["MITM"] = Ext.getCmp("MITM").getValue();
np["PN"] = Ext.getCmp("PN").getValue();
np["DEPID"] = Ext.getCmp("DEPID").getValue();
np["WC"] = Ext.getCmp("WC").getValue();
var is_Ok = true;
Ext.Ajax.request({
method: "POST",
url: '../../api/V20107API/DO_Ins_AMM_WKSTPD4',
params: np,
async: false,
success: function (response, opts) {
console.log("0 response.responseText=", response.responseText);
var Tmp_Obj = Ext.decode(response.responseText);
console.log("1 Tmp_Obj=", Tmp_Obj);
if (Tmp_Obj["success"] == true) {
var Tmp_Rtn_Msg = "自動新增4筆工作步序說明資料(AMM_WKSTPD)<br>"
+ "- 進廠檢測,拆檢,組裝,完工測試<br>";
+ Tmp_Obj["Rtn_Msg"];
mysuccessalert(Tmp_Rtn_Msg);
is_Ok = true;
console.log(" 5 Ext.getCmp('grid_M').fireEvent(selectionchange) ");
//Ext.getCmp('grid_M').fireEvent("selectionchange",);
//("selectionchange", function (view, selections, options) {
var cur_recs = Ext.getCmp("grid_M").getSelectionModel().getSelection();
Ext.getCmp('grid_M').fireEvent("selectionchange", Ext.getCmp("grid_M").getSelectionModel(),cur_recs);
}
else {
var Tmp_Rtn_Msg = "自動新增4筆工作步序說明資料(AMM_WKSTPD)失敗<br>"
+ "- 進廠檢測,拆檢,組裝,完工測試<br>"
+ "請檢核!! <br>"
+ Tmp_Obj["Rtn_Msg"];
mywarnalert(Tmp_Rtn_Msg);
is_Ok= false;
}
}, //end of success
failure: function (response, opts) {
var Tmp_Obj = Ext.decode(response.responseText);
var Tmp_Rtn_Msg = "新增4筆工作步序說明資料(AMM_WKSTPD)失敗<br>"
+ "請檢核<br>"
+ Tmp_Obj["Rtn_Msg"];
mywarnalert(Tmp_Rtn_Msg);
is_Ok= false;
}
}) //end of Ext.Ajax.Request
return is_OK;
}; // end of callBackFunc(id)
}) //Ext.getCmp('btn_save').on('click', function () {
目的: V20301 –[複製] – 複製多筆資料 – CheckboxModel – 覆蓋原本 parent.[複製]鈕.處理
目的: [刪除]鈕, -刪除勾選的多筆資料 - checkboxModel
處理說明: 1>將 grid_Single 換成 checkboxModel class
2> 重寫 btn_del.onclick 處理 , 即 beforedel() 傳回 false, 不處理 parent.del 函式
3> 依勾選的資料, 一筆一筆從資料庫刪除 , 資料庫刪除後, 再刪除畫面的資料
2>>重寫 btn_del.onclick 處理 , 即 beforedel() 傳回 false, 不處理 parent.del 函式
目的: 覆蓋原本 parent class event 的處理, Ex: [刪除]鈕, 覆蓋原本 parent.[刪除]鈕的處理
1>>方法1: 利用 parent.beforeDel 函式 , 傳回 false , 不會執行原本 parent.del處理
2>>方法2: 利用 元件.un("event名稱", event handler) , 解除 parent 的 event handler
目的: 停止event預設動作 - 停止往上冒泡處理說明:1> Label 的event flow 為 bubble 方式時
2> 觸發 lbl.onclick event後 , console 顯示 "lbl click"
瀏覽器將 click event 自動往下傳, 即傳給 checkbox.click event
3> 因 checkbox event 為 bubble 方式,所以又往上傳給 lbl
即觸發 lbl.onclick event , concole 又顯示 "lbl click"
--> 即 lbl.onclick event 被觸發兩次
一.要阻擋事件向上冒泡傳遞:
--> event.stopPropagation()
目的: 了解 Web DOM的 event 處理 機制
處理說明: 1> catch 時, 由上而下 (Document --> html --> body --> table --> tr --> td --> div)
2> bubble時, 由下而上(div-->td--> tr--> table --> body --> html --> Document)
--> DOM 兩種機制 (catch/bubble) 均有, 可分別設定 catch / bubble 的 event handler
參考原始網址: https://ithelp.ithome.com.tw/articles/10191970
而事件流程 (Event Flow) 指的就是「網頁元素接收事件的順序」。
事件流程可以分成兩種機制:
假設現在的事件是點擊上圖中藍色的 <td>
。
那麼當 td 的 click
事件發生時,會先走紅色的 「capture phase」:
Document
<html>
<body>
<table>
<tbody>
<tr>
<td>
(實際被點擊的元素)由上而下依序觸發它們的 click
事件。
然後再繼續執行綠色的 「bubble phase」,反方向由 <td>
一路往上傳至 Document
,整個事件流程到此結束。
Ex: DOM的實作案例
<div>當我點擊的是「子元素」的時候,透過 console.log
可以觀察到事件觸發的順序為:
"Parent Capturing"
"Child Capturing"
"Child Bubbling"
"Parent Bubbling"
由此可知,點擊子元素的時候,父層的 Capturing
會先被觸發,然後再到子層內部的 Capturing
或 Bubbling
事件。 最後才又回到父層的 Bubbling
結束。
子層的 Capturing
或 Bubbling
誰先誰後呢?
要看你程式碼的順序而定。
子層若是 Capturing
在 Bubbling
前面:
addEventListener()
基本上有三個參數,分別是「事件名稱」、「事件的處理器」(事件觸發時執行的 function
),以及一個「Boolean」值,由這個 Boolean 決定事件是以「捕獲」或「冒泡」機制執行,若不指定則預設為「冒泡」。目的: 子畫面onShow時,顯示主畫面grid資料欄位值