PageKit — 可自托管的 GrapesJS 建站工具,附完整源码。 获取抢先体验

问题 #4000💬 已回答提出于 2021年12月7日作者 zachsnoek0 个反应

Pasting a component in root body layer throws TypeError

快速解答作者 artf

谢谢@zachsnoek,是的,因为包装器(正体)是根组件,它没有相关的集合。 可能我们需要更新粘贴逻辑,但你目前的修复是个不错的补丁,可以避免这种错误,所以PR非常受欢迎 👍

阅读下方完整回答 ↓

问题

GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome v89 可复制演示链接 https://grapesjs.com/demo.html 描述一下那个虫子 如何复现这个漏洞?在官方演示中,进入图层管理器,用 cmd+c复制任意图层 点击根“Body”图层,粘贴 cmd+p进入浏览器控制台查看错误 预期的行为是什么? 贴上身体层可能不被允许,但不应该出错。 目前的行为是什么? 粘贴根 Body 层会抛出以下异常: 错误来自[paste commend](https://github.com/artf/grapesjs/blob/d97efb31080f937f980ed79b9d4bda53dedfa4a5/src/commands/view/PasteComponent.js#L12-L13); comp.collection 未定义。 我对这个代码库了解不够,不知道 .collection 是否应该返回该组件的子代码。我们通过覆盖粘贴命令并添加以下保护措施暂时解决了这个问题: 如果这是个好办法,告诉我,我很乐意开永久居民。 行为准则 [X] 我同意遵守本项目的行为准则

回答(4)

artf• 2021年12月9日

谢谢@zachsnoek,是的,因为包装器(正体)是根组件,它没有相关的集合。 可能我们需要更新粘贴逻辑,但你目前的修复是个不错的补丁,可以避免这种错误,所以PR非常受欢迎 👍

zachsnoek• 2021年12月9日

谢谢@zachsnoek是的,因为包装器(主体)是根组件,所以它没有相关的集合。可能我们需要更新粘贴逻辑,但你目前的修复是个不错的补丁,可以避免这种错误,所以PR非常受欢迎 👍

听起来不错;我会在本周末前刷新个人纪录 :+1:

GuiMoraesDev• 2021年12月16日

伙计们,我也遇到类似的问题 对我来说,错误发生在FileUploader上 ![截图,2021-12-16 17-10-32](https://user-images.githubusercontent.com/18218319/146442408-edc2621f-ea02-4131-bac6-47dd2ff384c7.png) 我试着在Grapes Demo里输入,看看那里是否也会出现这种情况,结果确实发生了! 我意识到如果我清理LocalStorage并重新加载页面,编辑器会加载标准模板,我可以在模板里放置任何合适的块,但如果我清理编辑器并尝试在编辑器里放置文本块,编辑器会保存一个HT...

GJSBlock• 2026年5月17日

谢谢你举报,@zachsnoek。 关于在根体图层粘贴组件会触发TypeError的建议很棒!虽然这个具体功能还没有出现在核心 API 中,但有几种方法可以实现类似的行为。 使用事件系统: “JavaScript editor.on('component:update', (component) => { 你的逻辑 }); ``` 替代方法: 听取“selector:add”以获取CSS选择器更改 使用“selector:custom”来表示自定义规则 利用“change:*”事件进行细致跟踪 构建一个插件,扩展编辑器并具备此功能 正式宣布: 如果此功能能惠及更多用户,考虑在 GrapesJ...

相关问答

通过相似的问题讨论继续研究。

与此问题匹配的付费插件

根据问题关键词和标签相关性精选,助你更快交付。

查看全部插件

正在加载付费插件推荐……

免费方案

在以下平台查看开源 GrapesJS 插件: GitHub 或在我们的免费目录中快速搜索。

浏览免费插件 →
高级方案

高级插件提供支持、定期更新和生产就绪的功能——为你节省数天的集成工作。

浏览高级插件 →

相关教程

关于同一主题的深入指南。

全部教程 →

浏览插件分类

直接跳转到市场上的插件分类页面。