【问题标题】:TinyMce fail while executing setContentTinyMce 在执行 setContent 时失败
【发布时间】:2017-10-16 02:03:10
【问题描述】:

我正在尝试使用 tinymce 4.7.1(从我的旧 tinymce 4.3.1 升级)。当我尝试通过调用方法 setContent 以编程方式设置 tinymce 的内容时,它会抛出以下错误:

Cannot read property 'parse' of undefined TypeError: Cannot read property 'parse' of undefined

在查看了错误的细节之后,我意识到 tinymce 期望在它的 tinymce.dom 中有序列化的类,并且在没有这个类的情况下它无法解析因此这个错误。

这是来自 tinymce 的 sn-p

else {
          // Parse and serialize the html
          if (args.format !== 'raw') {
            content = new Serializer({
              validate: self.validate
            }, self.schema).serialize(
              self.parser.parse(content, { isRootContent: true }) //this line is throwing error
              );
          }

与以前的版本(以前对我来说很好,版本 4.3.1)相比,对序列化类没有这种依赖。

有人可以建议我是否必须添加更多插件或类(默认包中未提供)以使我的代码正常工作?

我的观察:在一个孤立的原型示例中,当我运行托管在云上的 tinymce 时,它​​运行良好。

【问题讨论】:

    标签: javascript angularjs serialization tinymce-4


    【解决方案1】:

    能否请您展示一些运行代码来说明您如何使用setContent()?我怀疑您正试图在编辑器完全初始化之前调用它,因为 init() 方法是异步的。

    确保您等待编辑器完全初始化的最简单方法是依赖编辑器提供的init 事件:

    tinymce.init({
      selector: '#myTextarea',
      ...
      ...
      setup: function (editor) {
        editor.on('init', function () {
          editor.setContent('Using the on init stuff!');
        });
      }
    });
    

    【讨论】:

    • 感谢@Michael 的回复。当我尝试您建议的方法时,它仍然不起作用。看起来还有其他东西正在破坏流程。关于代码,我知道在不调查问题的情况下很难猜测问题的主要原因。所以将尝试分享我的指令的主要执行流程。
    【解决方案2】:

    在@Michael 的建议下,我能够部分解决这个问题。所以就我而言,有两个问题。

    1. 即使我已经升级 tinymce 以使用最新的插件和 js 文件,我仍然指的是旧版本的themes.min.js(这是因为我正在维护两个不同的 tinymce 版本,以便我可以推出这个版本升级先逐个限制页面),与新版本不兼容。这会导致 tinymce 编辑器的初始化不一致。一旦我修复了主题文件的来源,它就会正确初始化编辑器
    2. 在某些情况下,我的 tinymce 编辑器未正确加载,我试图执行 setContent 方法来设置导致错误的内容(正如@Michael 指出的那样)。因此,我将 setContent 调用移至在对象中公开的设置方法,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多