TinyMCE Ajax。如何在回调期间找到编辑器? (TinyMCE.get不起作用)

时间:2010-07-30 11:12:17

标签: tinymce

我正在做一些我认为相当标准的事情:

在Ajax应用程序中,我通过

动态创建编辑器

a)动态地向DOM添加textarea。 textarea的id存储在名为editField

的变量中

b)我将TinyMCE包裹在它周围:

tinyMCE.execCommand("mceAddControl", false, jq(editField).attr('id'));

c)我启动了对服务器的ajax调用以获取要编辑的数据,并且在回调中我想将它放入编辑器中。

tinyMCE.get( jq(editField).attr('id') ).setContent(data);

但是,当我从ajax调用

进入回调时
tinyMCE.get( jq(editField).attr('id') ) 

返回undefined。

编辑器似乎正在运作。我可以使用它,我甚至可以通过tinyMCE.activeEditor访问它(当我尝试保存时会发生这种情况)。但是我现在无法通过获取它。

所以:

a)当回调返回

时,tinyMCE没有完全实例化 b)其他事情正在发生。

我有什么想法可以测试这个吗?人们如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

行。我解决了这个问题但不是很优雅。

我的问题 是因为未能完全实例化TinyMCE编辑器以便从ajax调用返回。

我最终做的是:

1)在ajax回调中:

a)开始使用addControl命令

实例化编辑器

b)使用从服务器返回的值填充全局变量(MY_GLOBAL)

2)当我调用tinyMCE.init()时,我传递一个OnInit事件的回调函数。这需要两个步骤:

a)定义一个“setup”函数,它为tinyMCE添加一个OnInit回调处理程序。回调检查全局变量(此简化中的MY_GLOBAL),并将其值插入到“this”中的tinyMCE实例中。

  var setup = function(editor) {
    editor.onInit.add( function(editor, evt) {
      if (MY_GLOBAL) {
        this.setContent(MY_GLOBAL);
      }
    });
  };

b)将此设置传递给tinyMCE.init

var config = {
  blah : blah,
  setup : setup
};
tinyMCE.init(config);

现在ajax调用仍然在tinyMCE实例化之前返回其值,因此它填充了MY_GLOBAL。然后,当编辑器最终出现时,它会触发OnInit回调,它会在MY_GLOBAL中找到值,并将其放入编辑器中。

答案 1 :(得分:2)

找到另一种解决方案:

while(tinyMCE.get === 'undefined'){
        try {
            var ed = tinyMCE.get('your_mce_div');                   
        } catch (e) {
            // TODO: handle exception
        }
    }

适合我。也许这对某人有用。

答案 2 :(得分:1)

您是否尝试过tinyMCE.get( 0 )?

答案 3 :(得分:0)

为什么不使用 editField 而不是使用jquery节点的id-attribute(?)(也应该更高性能):

tinyMCE.execCommand("mceAddControl", false, editField);
tinyMCE.get( editField).setContent(data);
tinyMCE.get( editField);

这有用吗?