问题 #2181💬 已回答提出于 2019年8月4日作者 pouyamiralayi2 个反应

全局函数/变量

快速解答作者 artf1

抱歉@pouyamiralayi,但我相信你没完全理解Component中“脚本”属性的全部含义(显然[你不是唯一](https://github.com/artf/grapesjs/issues/358#issuecomment-333818540),即使我试图解释这个“脚本悖论”[这里](https://grapesjs.com/docs/modules/Components-js.html#basic-scripts)) #1691 里问的问题根本说不通,因为“script”属性里的上下文就像另一个世界,唯一能和那些世界通信的方式是用插值字符串(就像 [documentation](https://grapesjs.com/...

阅读下方完整回答 ↓

问题

你好!最近我注意到这个[问题](https://github.com/artf/grapesjs/issues/1691)。 我觉得有这个功能会很有帮助。与@artf建议的用Canvas脚本作为全局注入方式的方法不同,我认为这并不适合该功能的主要目的。我认为拥有全局变量和函数的主要用例是脚本在画布内部的处理方式:对于每个组件类型,每次渲染画布时都会执行一个函数。所以如果你在脚本中为某些事件注册了某种处理程序,你无法管理这些处理程序(比如将它们从事件中分离),因为每次渲染画布时执行上下文都会丢失。所以我们需要在全局范围上定义处理程序。 常见的解决方法是[这里](https://github.com/alvimm/grapesjs-expose/blob/master/src/index.js)所采用的思路。 我很乐意听听你@artf关于这件事的看法。 提前感谢大家。

回答(3)

artf2019年8月12日

抱歉@pouyamiralayi,但我相信你没完全理解Component中“脚本”属性的全部含义(显然[你不是唯一](https://github.com/artf/grapesjs/issues/358#issuecomment-333818540),即使我试图解释这个“脚本悖论”[这里](https://grapesjs.com/docs/modules/Components-js.html#basic-scripts)) #1691 里问的问题根本说不通,因为“script”属性里的上下文就像另一个世界,唯一能和那些世界通信的方式是用插值字符串(就像 [documentation](h...

pouyamiralayi2019年8月15日

感谢你的善意回答@artf。在挣扎了一段时间后,我终于觉得你说的完全合理。我刚才提这事真是太天真了,抱歉。目前的变通方法完全正确,是Canvas Global Scripts的补充。 对于那些试图实现全局脚本与本地脚本之间通信通道的设备,他们可以定义一个全局事件总线,并在本地连接或分离监听器。状态还通过模型值的插值来保存。 提前感谢大家。

collindutter2021年1月20日

@pouyamiralayi你能详细介绍一下你是如何创建全局事件总线,在全局脚本和本地脚本之间发送消息的吗?编辑器会把 grapesjs 的内容嵌入 iframe,所以你不能用全局窗口对象作为事件总线。

谢谢!

相关问答

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

与此问题匹配的付费插件

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

查看全部插件

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

免费方案

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

浏览免费插件 →
高级方案

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

浏览高级插件 →

浏览插件分类

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