GJS组件在通过模态服务显示时出现“未定义的帮助器”错误(Discourse 3.5.0)

你好,

关于此问题的后续:我已按照建议创建了 minimal-modal-test 插件。

  • 成功: 当测试插件的模态组件 (minimal-modal.gjs) 只包含基本元素时(例如 <p>、<textarea>、核心 <DModal>、<DButton>,甚至像 #if 用于条件块或 if 用于提交按钮的图标等内置助手),通过 post-menu-buttons 值转换器添加的按钮组件触发 modal.show() 时,它可以正确渲染而不会出错。这证实了基本模态服务、组件渲染、值转换器和内置助手在我的环境中(Discourse v3.5.0.beta3-dev)单独使用时似乎是有效的。

  • 失败: 一旦我将子组件 <StarRatingInput> 添加回模态的模板(minimal-modal.gjs 或 feedback-form-modal.gjs)中,错误(TypeError: userProvidedCallback is undefined / 之前是 Attempted to use a value as a helper... undefined)就会一致地再次出现。

我已确保 StarRatingInput 组件本身使用了早期确定的解决方法(内联 SVG 而不是 dIcon 助手,箭头函数用于 starClass 等方法以修复 this 上下文,标准 JS Array.from 而不是 range 助手)。StarRatingInput 的内部代码现在似乎是正确的。

这表明错误是由在此特定渲染上下文中,在父模态组件内渲染嵌套的 <StarRatingInput> 组件(其中包含 #each 循环、动态类绑定和事件处理程序)触发的。

复现步骤

  1. 你正在运行最新的 Discourse 开发环境版本。

  2. 以任何用户身份登录。

  3. 导航到任何主题并查看第一个帖子。

  4. 点击添加到帖子菜单的 “测试失败模态” 按钮。

  5. 打开浏览器的开发者控制台。

预期结果

应该出现一个简单的模态对话框,其中包含一个星级评分输入。

实际结果

模态完全无法渲染。浏览器控制台显示错误。