diff --git a/demo/FguiCreator3.8/assets/Basics/Item1.xml b/demo/FguiCreator3.8/assets/Basics/Item1.xml
new file mode 100644
index 0000000..fa68d07
--- /dev/null
+++ b/demo/FguiCreator3.8/assets/Basics/Item1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Basics/package.xml b/demo/FguiCreator3.8/assets/Basics/package.xml
index 8af6198..a0b9871 100644
--- a/demo/FguiCreator3.8/assets/Basics/package.xml
+++ b/demo/FguiCreator3.8/assets/Basics/package.xml
@@ -24,6 +24,7 @@
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Window/HideAllWindow.xml b/demo/FguiCreator3.8/assets/Window/HideAllWindow.xml
index 5b04bfb..08d3dab 100644
--- a/demo/FguiCreator3.8/assets/Window/HideAllWindow.xml
+++ b/demo/FguiCreator3.8/assets/Window/HideAllWindow.xml
@@ -10,5 +10,7 @@
+
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Window/Item1.xml b/demo/FguiCreator3.8/assets/Window/Item1.xml
new file mode 100644
index 0000000..e126658
--- /dev/null
+++ b/demo/FguiCreator3.8/assets/Window/Item1.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Window/SameItemWindow.xml b/demo/FguiCreator3.8/assets/Window/SameItemWindow.xml
new file mode 100644
index 0000000..faa9833
--- /dev/null
+++ b/demo/FguiCreator3.8/assets/Window/SameItemWindow.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Window/UIBaseWindow.xml b/demo/FguiCreator3.8/assets/Window/UIBaseWindow.xml
index 236a8ae..cfa46c2 100644
--- a/demo/FguiCreator3.8/assets/Window/UIBaseWindow.xml
+++ b/demo/FguiCreator3.8/assets/Window/UIBaseWindow.xml
@@ -35,5 +35,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/demo/FguiCreator3.8/assets/Window/package.xml b/demo/FguiCreator3.8/assets/Window/package.xml
index e923401..407d7aa 100644
--- a/demo/FguiCreator3.8/assets/Window/package.xml
+++ b/demo/FguiCreator3.8/assets/Window/package.xml
@@ -11,6 +11,8 @@
+
+
\ No newline at end of file
diff --git a/demo/assets/resources/ui/Window.bin b/demo/assets/resources/ui/Window.bin
index 9b512d0..c9e9650 100644
Binary files a/demo/assets/resources/ui/Window.bin and b/demo/assets/resources/ui/Window.bin differ
diff --git a/demo/assets/resources/ui/manual/Basics.bin b/demo/assets/resources/ui/manual/Basics.bin
index 1d9ec71..eaab675 100644
Binary files a/demo/assets/resources/ui/manual/Basics.bin and b/demo/assets/resources/ui/manual/Basics.bin differ
diff --git a/demo/assets/script/UI/Basics/Common/Item1.ts b/demo/assets/script/UI/Basics/Common/Item1.ts
new file mode 100644
index 0000000..f5d64a6
--- /dev/null
+++ b/demo/assets/script/UI/Basics/Common/Item1.ts
@@ -0,0 +1,20 @@
+/**
+ * @Author: Gongxh
+ * @Date: 2025-09-04
+ * @Description:
+ */
+
+import { fgui, kunpo } from "../../../header";
+
+const { uiheader, uiprop, uicom, uiclick } = kunpo._uidecorator;
+const { bindMethod, bindProp } = kunpo.data;
+
+@uicom("Basics", "Item1")
+export class Item1 extends fgui.GComponent {
+ @uiprop
+ private lab_desc: fgui.GTextField;
+
+ public onInit(): void {
+ console.log("Basics Item1 onInit", this.lab_desc);
+ }
+}
diff --git a/demo/assets/script/UI/Basics/Common/Item1.ts.meta b/demo/assets/script/UI/Basics/Common/Item1.ts.meta
new file mode 100644
index 0000000..ed77bf0
--- /dev/null
+++ b/demo/assets/script/UI/Basics/Common/Item1.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "a307cb3a-b903-4873-8018-804f3d82e2ef",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/demo/assets/script/UI/Window/Item1.ts b/demo/assets/script/UI/Window/Item1.ts
new file mode 100644
index 0000000..bf2d785
--- /dev/null
+++ b/demo/assets/script/UI/Window/Item1.ts
@@ -0,0 +1,19 @@
+/**
+ * @Author: Gongxh
+ * @Date: 2025-09-04
+ * @Description:
+ */
+import { fgui, kunpo } from "../../header";
+
+const { uiheader, uiprop, uicom, uiclick } = kunpo._uidecorator;
+const { bindMethod, bindProp } = kunpo.data;
+
+@uicom("Window", "Item1")
+export class Item1 extends fgui.GComponent {
+ @uiprop
+ private lab_desc: fgui.GTextField;
+
+ public onInit(): void {
+ console.log("Window Item1 onInit", this.lab_desc);
+ }
+}
diff --git a/demo/assets/script/UI/Window/Item1.ts.meta b/demo/assets/script/UI/Window/Item1.ts.meta
new file mode 100644
index 0000000..19cc5d2
--- /dev/null
+++ b/demo/assets/script/UI/Window/Item1.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "1ff847fb-6a86-4fce-9c97-4483771c6a67",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/demo/assets/script/UI/Window/SameItemWindow.ts b/demo/assets/script/UI/Window/SameItemWindow.ts
new file mode 100644
index 0000000..9e764c8
--- /dev/null
+++ b/demo/assets/script/UI/Window/SameItemWindow.ts
@@ -0,0 +1,22 @@
+/**
+ * @Author: Gongxh
+ * @Date: 2025-09-04
+ * @Description:
+ */
+
+
+import { kunpo } from "../../header";
+const { uiclass, uiprop, uiclick } = kunpo._uidecorator;
+
+@uiclass("Window", "Window", "SameItemWindow")
+export class SameItemWindow extends kunpo.Window {
+ protected onInit(): void {
+ this.adapterType = kunpo.AdapterType.Bang;
+ this.type = kunpo.WindowType.HideOne;
+ }
+
+ @uiclick
+ private onClickBtnClose(): void {
+ kunpo.WindowManager.closeWindow(this.name);
+ }
+}
diff --git a/demo/assets/script/UI/Window/SameItemWindow.ts.meta b/demo/assets/script/UI/Window/SameItemWindow.ts.meta
new file mode 100644
index 0000000..1272960
--- /dev/null
+++ b/demo/assets/script/UI/Window/SameItemWindow.ts.meta
@@ -0,0 +1,9 @@
+{
+ "ver": "4.0.24",
+ "importer": "typescript",
+ "imported": true,
+ "uuid": "1df418c4-04d7-4bd7-9125-36e070d091ff",
+ "files": [],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/demo/assets/script/UI/Window/UIBaseWindow.ts b/demo/assets/script/UI/Window/UIBaseWindow.ts
index c9391da..8497ac4 100644
--- a/demo/assets/script/UI/Window/UIBaseWindow.ts
+++ b/demo/assets/script/UI/Window/UIBaseWindow.ts
@@ -82,6 +82,11 @@ export class UIBaseWindow extends kunpo.Window {
kunpo.WindowManager.showWindow("HideAllWindow");
}
+ @uiclick
+ private onClickSameItem(): void {
+ kunpo.WindowManager.showWindow("SameItemWindow");
+ }
+
public getHeaderInfo(): kunpo.WindowHeaderInfo {
return kunpo.WindowHeaderInfo.create("WindowHeader", "aaa");
}
diff --git a/demo/assets/uiconfig/ui_config.json b/demo/assets/uiconfig/ui_config.json
index a093fdf..c39e0ff 100644
--- a/demo/assets/uiconfig/ui_config.json
+++ b/demo/assets/uiconfig/ui_config.json
@@ -1 +1 @@
-{"Basics":{"AlertWindow":{"props":["bg",1,0,"lab_title",1,4,"lab_content",1,5,"btn_close",1,1,"btn_ok",1,3,"btn_cancel",1,2],"callbacks":["onClickBtnClose",1,1,"onClickBtnOk",1,3,"onClickBtnCancel",1,2],"controls":[],"transitions":[]},"ToastWindow":{"props":["toast",1,1,"labTips",2,1,1,"bgMask",1,0],"callbacks":[],"controls":[],"transitions":[]},"WindowHeader":{"props":["btn_close",1,0],"callbacks":[],"controls":[],"transitions":[]},"WindowHeader2":{"props":["btn_close",1,0],"callbacks":[],"controls":[],"transitions":[]}},"Condition":{"ConditionWindow":{"props":["reddot1",1,4,"reddot2",1,5,"btn_condition1",1,6,"btn_condition2",1,7,"btn_condition3",1,8,"btn_condition4",1,9],"callbacks":["onClickBtnClose",1,1,"onClickBtnCondition1",1,6,"onClickBtnCondition2",1,7,"onClickBtnCondition3",1,8,"onClickBtnCondition4",1,9],"controls":[],"transitions":[]}},"Data":{"DataItem":{"props":["lab_level",1,1],"callbacks":[],"controls":[],"transitions":[]},"DataWindow":{"props":["lab_level",1,9,"lab_storey",1,10,"lab_min",1,12,"lab_max",1,13,"lab_ispassed",1,11],"callbacks":["onRefreshLevel",1,2,"onRefreshStorey",1,3,"onRefreshBool",1,4,"onRefreshData",1,5,"onRefreshMin",1,6,"onRefreshMax",1,7,"onRefreshAll",1,8,"onTouchClose",1,1],"controls":[],"transitions":[]}},"Home":{"HomeWindow":{"props":[],"callbacks":["onClickUI",1,6,"onSocketWindow",1,3,"onClickBtnCondition",1,1,"onClickMiniGame",1,4,"onClickBtnHotUpdate",1,5,"onClickLoadBuffer",1,2,"onClickData",1,7],"controls":["sta2","sta2","status","status"],"transitions":["t0","t0","t1","t1"]}},"HotUpdate":{"HotUpdateWindow":{"props":["lab_version",1,4,"lab_desc",1,5],"callbacks":["onClickClose",1,3,"onCheckUpdate",1,1,"onStartUpdate",1,2],"controls":[],"transitions":[]}},"MiniGame":{"MiniGameWindow":{"props":["btn_close",1,5,"lab_adid",1,8,"lab_payQuantity",1,9],"callbacks":["onClickBtnClose",1,5,"onClickBtnInitAds",1,2,"onClickBtnPay",1,3],"controls":[],"transitions":[]}},"Socket":{"SocketTestWindow":{"props":["text_input",1,7,"text_input_message",1,9],"callbacks":["onCloseWindow",1,1,"onConnection",1,3,"onDisconnect",1,2,"onSendText",1,4,"onSendBinary",1,5],"controls":[],"transitions":[]}},"Window":{"CloseAllWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"CloseOneWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"CustomComponents":{"props":["n1",1,1],"callbacks":[],"controls":[],"transitions":[]},"HideAllWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"HideOneWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"PopWindow":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"PopWindowHeader1":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"PopWindowHeader2":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"UIBaseWindow":{"props":[],"callbacks":["onClickBtnClose",1,8,"onClickBtnHeader1",1,1,"onClickBtnHeader2",1,2,"onClickBtnEmpty",1,3,"onClickBtnCloseOne",1,4,"onClickBtnCloseAll",1,5,"onClickBtnHideOne",1,6,"onClickBtnHideAll",1,7],"controls":[],"transitions":[]}}}
\ No newline at end of file
+{"Basics":{"AlertWindow":{"props":["bg",1,0,"lab_title",1,4,"lab_content",1,5,"btn_close",1,1,"btn_ok",1,3,"btn_cancel",1,2],"callbacks":["onClickBtnClose",1,1,"onClickBtnOk",1,3,"onClickBtnCancel",1,2],"controls":[],"transitions":[]},"Item1":{"props":["lab_desc",1,1],"callbacks":[],"controls":[],"transitions":[]},"ToastWindow":{"props":["toast",1,1,"labTips",2,1,1,"bgMask",1,0],"callbacks":[],"controls":[],"transitions":[]},"WindowHeader":{"props":["btn_close",1,0],"callbacks":[],"controls":[],"transitions":[]},"WindowHeader2":{"props":["btn_close",1,0],"callbacks":[],"controls":[],"transitions":[]}},"Condition":{"ConditionWindow":{"props":["reddot1",1,4,"reddot2",1,5,"btn_condition1",1,6,"btn_condition2",1,7,"btn_condition3",1,8,"btn_condition4",1,9],"callbacks":["onClickBtnClose",1,1,"onClickBtnCondition1",1,6,"onClickBtnCondition2",1,7,"onClickBtnCondition3",1,8,"onClickBtnCondition4",1,9],"controls":[],"transitions":[]}},"Data":{"DataItem":{"props":["lab_level",1,1],"callbacks":[],"controls":[],"transitions":[]},"DataWindow":{"props":["lab_level",1,9,"lab_storey",1,10,"lab_min",1,12,"lab_max",1,13,"lab_ispassed",1,11],"callbacks":["onRefreshLevel",1,2,"onRefreshStorey",1,3,"onRefreshBool",1,4,"onRefreshData",1,5,"onRefreshMin",1,6,"onRefreshMax",1,7,"onRefreshAll",1,8,"onTouchClose",1,1],"controls":[],"transitions":[]}},"Home":{"HomeWindow":{"props":[],"callbacks":["onClickUI",1,6,"onSocketWindow",1,3,"onClickBtnCondition",1,1,"onClickMiniGame",1,4,"onClickBtnHotUpdate",1,5,"onClickLoadBuffer",1,2,"onClickData",1,7],"controls":["sta2","sta2","status","status"],"transitions":["t0","t0","t1","t1"]}},"HotUpdate":{"HotUpdateWindow":{"props":["lab_version",1,4,"lab_desc",1,5],"callbacks":["onClickClose",1,3,"onCheckUpdate",1,1,"onStartUpdate",1,2],"controls":[],"transitions":[]}},"MiniGame":{"MiniGameWindow":{"props":["btn_close",1,5,"lab_adid",1,8,"lab_payQuantity",1,9],"callbacks":["onClickBtnClose",1,5,"onClickBtnInitAds",1,2,"onClickBtnPay",1,3],"controls":[],"transitions":[]}},"Socket":{"SocketTestWindow":{"props":["text_input",1,7,"text_input_message",1,9],"callbacks":["onCloseWindow",1,1,"onConnection",1,3,"onDisconnect",1,2,"onSendText",1,4,"onSendBinary",1,5],"controls":[],"transitions":[]}},"Window":{"CloseAllWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"CloseOneWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"CustomComponents":{"props":["n1",1,1],"callbacks":[],"controls":[],"transitions":[]},"HideAllWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"HideOneWindow":{"props":["btn_close",1,2],"callbacks":["onClickBtnClose",1,2],"controls":[],"transitions":[]},"Item1":{"props":["lab_desc",1,1],"callbacks":[],"controls":[],"transitions":[]},"PopWindow":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"PopWindowHeader1":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"PopWindowHeader2":{"props":["btn_close",1,2],"callbacks":["onCloseWindow",1,2],"controls":[],"transitions":[]},"SameItemWindow":{"props":[],"callbacks":["onClickBtnClose",1,1],"controls":[],"transitions":[]},"UIBaseWindow":{"props":[],"callbacks":["onClickBtnClose",1,8,"onClickBtnHeader1",1,1,"onClickBtnHeader2",1,2,"onClickBtnEmpty",1,3,"onClickBtnCloseOne",1,4,"onClickBtnCloseAll",1,5,"onClickBtnHideOne",1,6,"onClickBtnHideAll",1,7,"onClickSameItem",1,9],"controls":[],"transitions":[]}}}
\ No newline at end of file
diff --git a/demo/extensions-config/fgui/Basics/Item1.json b/demo/extensions-config/fgui/Basics/Item1.json
new file mode 100644
index 0000000..dded3c5
--- /dev/null
+++ b/demo/extensions-config/fgui/Basics/Item1.json
@@ -0,0 +1,18 @@
+{
+ "props": {
+ "loader": {
+ "name": "loader",
+ "idPath": "n1_fchf",
+ "namePath": "loader"
+ },
+ "lab_desc": {
+ "name": "lab_desc",
+ "idPath": "n1_fchf",
+ "namePath": "lab_desc"
+ }
+ },
+ "callbacks": {},
+ "controls": {},
+ "transitions": {},
+ "__version__": "0.0.1"
+}
\ No newline at end of file
diff --git a/demo/extensions-config/fgui/Window/Item1.json b/demo/extensions-config/fgui/Window/Item1.json
new file mode 100644
index 0000000..dded3c5
--- /dev/null
+++ b/demo/extensions-config/fgui/Window/Item1.json
@@ -0,0 +1,18 @@
+{
+ "props": {
+ "loader": {
+ "name": "loader",
+ "idPath": "n1_fchf",
+ "namePath": "loader"
+ },
+ "lab_desc": {
+ "name": "lab_desc",
+ "idPath": "n1_fchf",
+ "namePath": "lab_desc"
+ }
+ },
+ "callbacks": {},
+ "controls": {},
+ "transitions": {},
+ "__version__": "0.0.1"
+}
\ No newline at end of file
diff --git a/demo/extensions-config/fgui/Window/SameItemWindow.json b/demo/extensions-config/fgui/Window/SameItemWindow.json
new file mode 100644
index 0000000..f823091
--- /dev/null
+++ b/demo/extensions-config/fgui/Window/SameItemWindow.json
@@ -0,0 +1,13 @@
+{
+ "props": {},
+ "callbacks": {
+ "onClickBtnClose": {
+ "name": "btn_close",
+ "idPath": "n4_fnoh",
+ "namePath": "btn_close"
+ }
+ },
+ "controls": {},
+ "transitions": {},
+ "__version__": "0.0.1"
+}
\ No newline at end of file
diff --git a/demo/extensions-config/fgui/Window/UIBaseWindow.json b/demo/extensions-config/fgui/Window/UIBaseWindow.json
index f47626b..fa9de86 100644
--- a/demo/extensions-config/fgui/Window/UIBaseWindow.json
+++ b/demo/extensions-config/fgui/Window/UIBaseWindow.json
@@ -40,7 +40,14 @@
"name": "btn_close",
"idPath": "n22_sf8l",
"namePath": "btn_close"
+ },
+ "onClickSameItem": {
+ "name": "btn_sameitem",
+ "idPath": "n23_h2xj",
+ "namePath": "btn_sameitem"
}
},
+ "controls": {},
+ "transitions": {},
"__version__": "0.0.1"
}
\ No newline at end of file
diff --git a/src/ui/UIDecorator.ts b/src/ui/UIDecorator.ts
index 955d2ff..e078144 100644
--- a/src/ui/UIDecorator.ts
+++ b/src/ui/UIDecorator.ts
@@ -98,7 +98,7 @@ export namespace _uidecorator {
};
}
/** 用来存储组件注册信息 @internal */
- let uicomponentMap: Map = new Map();
+ let uicomponentMap: Map = new Map();
/** 获取组件注册信息 */
export function getComponentMaps(): Map {