目的: V1060301- 專案定更定檢件清單 - 單檔維護(新增/修改/刪除/挎貝) - 匯入/匯出
var S_DB = Ext.create('S_DB', {
apiName: 'V1060301'
});
1>*.js
目的: V1060301- 專案定更定檢件清單 - 單檔維護(新增/修改/刪除/挎貝) - 匯入/匯出
1>*.js
目的: V1060302 – 專案定更檢清單 - 分類 – Runtime 設定挑選欄位
處理說明: 1> click 才是 event 名稱, 不可用 handler
handler 是屬性名稱,不是 event name , 所以不可用在 on('handler', function(){
好的,我來示範一個「Network Debug 範例」,讓你能在瀏覽器 F12 檢查 TreeStore 的請求是否真的送出到後端:
打開瀏覽器開發者工具
F12 或 Ctrl+Shift+I。展開節點觸發請求
Ext.tree.Panel 裡點擊某個節點。檢查請求細節
../api/V80E01AAPI/get_sub_TreeData1)。POST(如果後端是 [HttpPost])。cur_DEPID。常見錯誤排查
beforeload 是否正確設定。405 Method Not Allowed → 前端用 GET,後端只允許 POST。404 Not Found → URL 路徑不匹配。200 OK 但沒有資料 → 後端查詢邏輯或回傳格式不符。http://localhost:xxxx/api/V80E01AAPI/get_sub_TreeData1POSTcur_DEPID: AIDC
[
{ "id":"A001", "text":"A001:部門", "leaf":false },
{ "id":"E001", "text":"E001:員工", "leaf":true }
]
👉 這樣你就能快速判斷:到底是 前端沒送出,還是 後端沒接到,或是 資料格式不符。
要不要我幫你寫一個「最小可測試範例」的 TreeStore + Controller,讓你可以直接跑起來測試 Network 面板?
type: 'ajax',url: '../api/V80E01AAPI/get_sub_TreeData1',actionMethods: { read: 'POST' }, // 改成 POSTreader: { type: 'json' },}
3> 將 Ext.tree.Panel.store 設定成 myTreeStore
var cmp_sub_TreePanel1 =
get_cmp_treepanel1("sub_TreePanel1","AIDC",10, myTreeStore);
4>Ext.tree.Panel - DoubleClick 展開節點時, 會呼叫URL
會自動呼叫 URL (store.proxy.url) 讀取下層節點
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,常用來在不同系統之間傳遞資料。它的設計理念是「簡單、易讀、易解析」,既能讓人類直觀理解,也能被電腦快速處理。
純文字格式:資料以文字形式儲存,通常是 .json 檔案。
結構清晰:由「鍵值對」組成,類似字典或物件。
跨平台通用:不依賴特定程式語言,幾乎所有語言都能解析。
常用於網路傳輸:例如 API 回傳資料時,最常見的格式就是 JSON
{
"name": "Alice",
"age": 25,
"isStudent": true,
"skills": ["Python", "JavaScript", "SQL"],
"node": {856:"系統設計課",611292: "蔡聰進",610929:"楊清榮",} ,
}
字串:用雙引號 " " 包起來
數字:直接寫,不需要引號
布林值:true 或 false
陣列:用 [] 包起來
物件:用 {} 包起來,裡面是鍵值對
API 資料交換:伺服器和前端之間傳遞資料。
設定檔:許多應用程式用 JSON 來儲存設定。
資料儲存:簡單的資料庫或檔案系統也會用 JSON。
目的: V80E01A - 以 Ext.Tree.Panel & Ext.data.TreeStore 的簡單應用
if (checkisnull(par_flex)) {function get_cmp_treepanel1(par_id,par_title, par_flex, par_store) {}par_flex = 10;{var rtn_cmp =id: par_id,xtype: 'treepanel', border: 0,flex: par_flex,title: par_title,rootVisible: true,store: par_store, //若par_store有值,則會以 par_store 為主,並覆蓋如下 root 的設定
text: par_title,root: {children: [expanded: true,text: '子節點 1',{},leaf: truetext: '子節點 2',{children: [expanded: true,{ text: '子節點 2-2', leaf: true }{ text: '子節點 2-1', leaf: true },}]}, // end of s_AMM單號]return rtn_cmp;};
};
var myTreeStore ={xtype: 'treeStore',root: {text: '根節點A',expanded: true,children: [{ text: '節點 A1', leaf: true },{text: '節點 A2', expanded: true, children: [{ text: '節點 A2-1', leaf: true }]}]}};var cmp_sub_TreePanel1 = get_cmp_treepanel1("sub_TreePanel1","AIDC",10, myTreeStore);
function V80E01A_AddSub() {
var sub_TreePanel1 = Ext.getCmp("sub_TreePanel1");
var selectedNode = sub_TreePanel1.getSelectionModel().getSelection()[0];
if (selectedNode) {
//若目前selectedNode為leaf , 則需先設為 false , 否則 appendChild 會無效
if (selectedNode.get('leaf')) {
selectedNode.set('leaf', false);
};
selectedNode.appendChild({
text: '新子節點',
leaf: true
});
// 如果要立即展開顯示selectedNode.expand();}};
目的: V80E01A 以 Ext.Tree.Panel & Ext.data.TreeStore 建立公司組織圖
SQL:SELECT 'DEP' as TYPE,B.DPRTID as P_DEPID,A.DEPID as ID,A.DEPNM as NMFROM HR_DEP A, HR_DEPHIRCH BWHERE A.DEPID = B.DEPIDAND B.DPRTID = '800'unionSELECT 'EMP' as TYPE,C.DEPID as P_DEPID,C.EMPLYID as ID,C.EMPLYNM as NMFROM HR_EMPLYM CWHERE C.DEPID = '800'ORDER BY TYPE DESC,ID;