我有一个与CKEditor对话框有关的特殊问题。我已经设法将一个php文件(包含Datatables)嵌入到对话框窗口中。然后,用户可以选择将插入CKEditor的行。
将HTML嵌入对话框窗口似乎很简单:
CKEDITOR.dialog.add( 'tableDialog', function( editor ) {
return {
title: 'parametres',
minWidth: 800,
minHeight: 500,
contents: [
{
id: 'tab-basic',
label: 'Basic Settings',
elements: [
{
type:"html",
id:"htmlPreview",
style:"width:95%;height:95%;",
html:test_HTML,
commit: function( element ) {
etc..
有趣的是,填充变量'test_HTML'很棘手。将其定义为HTML对象非常有效:
test_HTML = '<object type="text/html" data="http://entseditor.etest.ee/edit/mm_insert.php" style="width:100%; height:100%"><p></p></object>';
,使用jQuery执行ajax会失败:
var request = $.ajax({
url: "http://entseditor.etest.ee/edit/mm_insert.php",
//type: "POST",
//data: {id : menuId},
dataType: "html"
});
request.done(function(msg) {
//$("#asdasd").html( msg );
test_HTML = msg ;
//alert( 'success' + test_HTML );
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
(请求很好并且在id ='asdasd'中给出了正确的响应,但是CKEditor对话框窗口说:“未捕获的TypeError:无法调用未定义的方法'charAt'。而且两个HTML看起来仍然相同。)
现在使用该对象没有问题,但是我似乎无法从创建的#document获得响应。我已尝试过变量和隐藏字段,但无法从“父”文档中访问它们。
有没有人有CKEditor这方面的经验?
(如果我没有按照正确的条款解释所有内容,我很抱歉。)
答案 0 :(得分:1)
很难得到全局,但它有点像同步/异步问题。你设置后肯定是在访问变量吗?即使在request.done
之前声明CKEDITOR.dialog.add
函数,在test_HTML = msg ;
运行之后可能会调用实际的CKEDITOR.dialog.add
,因为它是异步调用。
意味着在加载ajax时,JavaScript会继续运行并执行CKEDITOR.dialog.add
,以便test_HTML
保持未定义状态。尝试将其设置为在任何代码访问之前100%确定设置的默认值,然后maby尝试按照您执行代码的顺序执行流程。