【问题标题】:Edit HTML that is in a <textarea> using GrapesJs使用 GrapesJs 编辑 <textarea> 中的 HTML
【发布时间】:2020-05-12 23:52:49
【问题描述】:

我想为当前使用简单的&lt;textarea&gt; 字段编辑的 HTML sn-p 提供可视化编辑器。

我正在尝试学习 GrapesJs 来实现这一目标,但我无法掌握这个想法。据我了解,GrapesJs 被渲染为指定的&lt;div&gt;,可能采用与要编辑的初始模板相同的&lt;div&gt; 内容,然后我猜它会修改 DOM 或将其工作存储在浏览器存储中。

如果我理解正确,我仍然不知道如何改变这种行为来处理我的&lt;textarea&gt; 情况。我需要编辑器将&lt;textarea&gt; 内容作为其初始模板,并最终将修改后的 HTML sn-p 作为文本 (?) 放回其中。所以我们不需要将我们的 DOM 存储在任何地方或将 HTML 发送到服务器。此&lt;textarea&gt; 所在的表单将负责将其放到后端。

这也让我想知道 GrapesJs 是如何与放置&lt;textarea&gt; 的表单分开的,它可能有自己的样式和代码。

Grapes 会对正在编辑的页面的样式和 JavaScript 做什么?它们会成为 GrapesJs 生成的文本的一部分吗?...

我将欣赏一个小的代码示例,它将打开一个 GrapesJs 可视化编辑器,该编辑器将接收和存储其工作到/来自 &lt;textarea&gt;

如果不能避免的话,我可以为 html 和样式创建两个 &lt;textarea&gt;s

(在编辑器本身和我们正在编辑的页面的逻辑分离方面,我发现文档对我的知识水平感到困惑,我目前无法理解文档中的这些概念)

【问题讨论】:

    标签: javascript grapesjs


    【解决方案1】:

    更新

    我认为在这种情况下,您可以挂钩 component 事件,例如添加、更新、删除以更新您的文本区域。

    在下面的示例中,我正在这样做Codepen

    const editor = grapesjs.init({
                height: '100%',
                container: '#gjs',
                showOffsets: true,
                fromElement: true,
                noticeOnUnload: false,
                storageManager: false,
                plugins: ['grapesjs-preset-webpage'],
              });
        const htmlTextarea = document.getElementById('html')
        const cssTextarea = document.getElementById('css')
        const updateTextarea = (component, editor)=>{
          const e = component.em.get("Editor");
          htmlTextarea.value= e.getHtml();
          cssTextarea.value= e.getCss();
        }
        editor.on('component:add', updateTextarea);
        editor.on('component:update', updateTextarea);
        editor.on('component:remove', updateTextarea);
        const updateInstance = () => {
          editor.setComponents(htmlTextarea.value)
          editor.setStyle(cssTextarea.value)
        }
        document.getElementById('save').onclick=updateInstance;
    

    【讨论】:

    • 谢谢!我是否正确地假设此解决方案从不从 textareas 中获取数据,只将其放在那里?
    • 只是找不到setHtml/setCss编辑器的功能...
    • 谢谢! “保存”按钮允许初始加载,随后的按钮点击打破了一切......但没关系!我想我知道如何将数据加载到编辑器中。顺便说一句,如果我交换setStylesetComponents,效果会更好。似乎设置组件首先影响样式,然后我们再次设置样式。但这只是一个猜测。再次感谢!
    • 你是对的,检查最后的更新,现在你可以用两种方式来做:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    相关资源
    最近更新 更多