问题 #4576💬 已回答提出于 2022年9月12日作者 benryanwilliams1 个反应

点击“样式环绕”按钮会影响同一文本框内其他组件的内部组件

快速解答作者 artf1

RTE在编辑时依赖于DOM内容,所以如果你故意用类似的程序删除它 “''js onRender() { this.el.innerHTML = this.model.get(“displayedText”) }, ``` 编辑完成后,内部组件将被移除。

阅读下方完整回答 ↓

问题

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? Chrome 104.0.5112.101可复制演示链接 https://jsfiddle.net/7cLr0xt2/3/描述一下那个虫子 如何复现这个漏洞? 不知为何,我无法在上面链接的小提琴里重现这个bug,因为第34行“selectedComponent.components('<span liquid=”if contact.id“>jhbjhhgjj</span> <span liquid=”else“>qwewqeqwe</span>')''并不能替换组件的内部组件,所以我只能分享一个项目中发生的情况视频,步骤如下:双击“Hello World”!!文本框中选择“世界”一词在RTE编辑器中点击画笔按钮,将该词包裹进行样式化点击组件工具栏最左侧圈出的“if”按钮,点击弹出的对话框中的“确定”,将该组件转换为“条件文本”组件双击新创建的“打开条件句选择”组件(通常会弹出对话框,但为了解决这个bug我简化了,现在它只是给组件应用一些虚拟信息,包括添加属性和更改组件的内部组件)。不过更换内部部件在这把小提琴里不起作用,不知道为什么)点击“查看代码”按钮查看代码对代码的更改——如你所见,它插入了属性 'liquidtag=“if”,但内部组件未显示。在我的项目中,这个跨度的内部分量是“<span li...

回答(4)

artf2022年9月13日

RTE在编辑时依赖于DOM内容,所以如果你故意用类似的程序删除它 “''js onRender() { this.el.innerHTML = this.model.get(“displayedText”) },

编辑完成后,内部组件将被移除。
benryanwilliams2022年9月13日

好的,谢谢@artf,这说得通。 然而,那些代码行,以及 必须在画布内渲染正确的选中状态(包括组件最初渲染时以及用户选择不同的“if”状态,从而改变“displayedText”): https://user-images.githubusercontent.com/67364267/189854125-9544d34b-2f71-4b0c-872e-dbdfb2232fd9.mov 你能想到用RTE编辑后保留内部组件的方法吗?也许我可以把这些内部组件存储在“条件文本”组件本身的属性里,并在“onRender()”时分配它们?如果可以,我该如何在“onRender()”钩子里设置组件的“co...

benryanwilliams2022年9月13日

我还需要做更多测试,但看起来我通过在创建/编辑组件时保存内部组件,然后使用'rte:disable' 钩子,如下,解决了这个问题: 这看起来有点老套,如果你能想到更好的方法,请告诉我。

ClaudeCode2026年5月17日

谢谢你举报,@benryanwilliams。 关于点击“样式包裹”按钮会影响同一文本框内其他组件的内部组件,这个问题问得很好。ProseMirror 推荐的方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('something changed')); 组件生命周期 editor.on('compone...

相关问答

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

与此问题匹配的付费插件

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

查看全部插件

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

免费方案

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

浏览免费插件 →
高级方案

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

浏览高级插件 →

相关教程

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

全部教程 →

浏览插件分类

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