执行setContent时TinyMce失败

时间:2017-10-16 02:03:10

标签: javascript angularjs serialization tinymce-4

我正在尝试使用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的片段

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时,它运行良好。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我能够通过@Michael给出的建议来解决这个问题。所以在我的案例中有两个问题。

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