fix(AutoForm): optimize data initialization for better binding support

This commit is contained in:
AI Engineer 2026-05-17 17:03:18 +08:00
parent 36f39bfa08
commit 5467cc6e29
3 changed files with 29 additions and 20 deletions

20
dist/base.js vendored
View File

@ -216,15 +216,19 @@ Component.register("AutoForm", (container) => {
container.request = { method: "POST" }; container.request = { method: "POST" };
container.response = {}; container.response = {};
container.result = null; container.result = null;
if (!container.data || !container.data.__watch) { const setupData = () => {
container.data = NewState(container.data || {}); if (!container.data || !container.data.__watch) {
} container.data = NewState(container.data || {});
container.data.__watch("*", () => {
if (container.inline) {
const dt = container.closest("DataTable");
if (dt && dt.refresh) dt.refresh();
} }
}); container.data.__watch("*", () => {
if (container.inline) {
const dt = container.closest("DataTable");
if (dt && dt.refresh) dt.refresh();
}
});
};
if (container.data) setupData();
else requestAnimationFrame(setupData);
container.form = $(container, "form"); container.form = $(container, "form");
container.submit = (opt = {}) => { container.submit = (opt = {}) => {
var _a, _b; var _a, _b;

2
dist/base.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -9,17 +9,22 @@ Component.register('AutoForm', container => {
container.response = {} container.response = {}
container.result = null container.result = null
// 立即初始化数据代理,避免异步延迟导致 Select 等组件初始化时找不到值而重置 // 初始化数据代理与联动逻辑
if (!container.data || !container.data.__watch) { const setupData = () => {
container.data = NewState(container.data || {}) if (!container.data || !container.data.__watch) {
container.data = NewState(container.data || {})
}
container.data.__watch('*', () => {
if (container.inline) {
const dt = container.closest('DataTable')
if (dt && dt.refresh) dt.refresh()
}
})
} }
container.data.__watch('*', () => { // 如果 data 已经存在(可能是同步绑定的),立即设置;否则延迟一帧等待属性绑定完成
if (container.inline) { if (container.data) setupData()
const dt = container.closest('DataTable') else requestAnimationFrame(setupData)
if (dt && dt.refresh) dt.refresh()
}
})
container.form = $(container, 'form') container.form = $(container, 'form')
container.submit = (opt = {}) => { container.submit = (opt = {}) => {