From abfaf926c49ada195c23e23fbd2e04912b372583 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 22 Mar 2025 10:03:11 +0800 Subject: [PATCH] fix #305 --- src/components/render/FormRender.vue | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/components/render/FormRender.vue b/src/components/render/FormRender.vue index e1e434ae..ce6251c0 100644 --- a/src/components/render/FormRender.vue +++ b/src/components/render/FormRender.vue @@ -49,9 +49,28 @@ const parseProps = (rawProps: Record, model: Record) = model[value] = newValue } } else if (key.startsWith('on')) { - // 处理事件监听,值是函数的代码 - const eventName = key.replace('on', '').toLowerCase() - parsedProps[eventName] = new Function('model', `with(model) { return ${value} }`)(model) + // 处理事件监听,值是函数的代码 function xxx(e) { ... } + if (typeof value === 'string') { + // 创建动态函数并绑定model上下文 + const handler = new Function( + 'model', + 'event', + ` + try { + with(model) { + return (${value})(event); + } + } catch(e) { + console.error('事件处理函数执行错误:', e); + } + `, + ) + // 包装事件处理器,保持vue事件参数传递特性 + parsedProps[key] = (...args: any[]) => { + const [event] = args + return handler(model, event) + } + } } else { // 如果是表达式,需要绑定 if (typeof value === 'string' && isExpression(value)) {