我正在做一些我认为相当标准的事情:
在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)其他事情正在发生。我有什么想法可以测试这个吗?人们如何解决这个问题?
答案 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);
这有用吗?