【问题标题】:tinyMCE as drop target for ng2-dndtinyMCE 作为 ng2-dnd 的放置目标
【发布时间】:2017-03-27 09:34:26
【问题描述】:

我根据此处给出的指南在我的 angular2 应用程序中使用 tinyMCE:https://www.tinymce.com/docs/integrations/angular2/

现在我想像这样作为 ng2-dnd 的放置目标:

<textarea dnd-droppable (onDropSuccess)="itemDropped($event)" id="{{elementId}}"></textarea>

但是,没有触发任何事件。我想这与 tinyMCE 用 iframe 替换 textarea 有关,但我对 angular2 还不够熟悉,无法理解如何在此处应用以下链接。 How to make tinymce textarea editor droppable?

提前感谢您的任何建议!

【问题讨论】:

  • 你最后找到解决办法了吗?我需要实施类似的事情,并会感谢任何帮助。 :)
  • 您是否设置了任何东西让 tinyMCE 知道 textarea 是 tinyMCE DOM 元素?你的组件 ts 是什么样子的?
  • @mc.suchecki 不幸的是没有。我最终在编辑器上方添加了一个放置区域,这对于我的原型用例来说是可以的......但是请分享你最终使用的任何内容:-)
  • 马丁-谢谢。 :) 我会尝试像@jornare 建议的那样做,并报告结果。

标签: javascript angular drag-and-drop tinymce


【解决方案1】:

有一些问题导致这不起作用。

首先,如前所述,TinyMCE 有自己的元素,包括用于渲染实际编辑器的 iframe。 iframe 导致编辑器中的事件不会向上冒泡。

将 dnd-droppable 添加到最终被隐藏的 texarea 不会给任何可见元素放置。

在 textarea 周围添加一个 div 元素会在 TinyMCE 标头中为您提供一个可放置区域,但遗憾的是在编辑器中没有。 (由于 iframe)。

但是,使用 TinyMCE 内置事件,您仍然可以将编辑器用作放置目标。您还需要添加“paste_data_images”属性。

tinymce.init({
    selector: '#' + this.elementId,
    plugins: ['link', 'paste', 'table'],
    skin_url: 'assets/skins/lightgray',
    paste_data_images: true,
    setup: editor => {
        editor.on('drop', e => {
            console.log(e);
        });
    }
});

请注意,您收到的 drop 事件是标准的 drop-event,不使用 dnd 处理。我认为这对您的情况很好,如果不是,您可以转向 dnd 文档以进一步处理它。

【讨论】:

  • 好主意,谢谢!我需要被指出正确的方向。 :) 我今天将尝试这种方法并报告结果 - 也许我可以在此处发布完整的解决方案以供将来参考。我想暂时保持赏金开放,但到目前为止,我当然是你的答案是最好的。 ;)
  • 注意到此事件在编辑器中的文本更新之前被触发。我想在拖放操作完成后对文本进行更改。有什么办法可以做到这一点?我正在探索事件的参数“e”,但到目前为止我找不到任何可以帮助我的东西!提前谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多