我为CKEditor创建了一个插件,打开一个带有下拉列表的对话框。在该下拉列表中是用户在CKEditor之外上传的文件列表。计划是在包含该文件名的文本中插入“标签”,如[[myfile.pdf]],然后当我显示实际页面时,我将插入该文件的链接。
问题是由CKEditor创建的下拉框是列出文件名(正确)但是当我选择它时,它会将文件的SIZE插入文本而不是文件名。当插件运行时,它会执行ajax调用并获取用户文件的目录列表,这是该编号的来源;我认为它与文件ID混淆。
这是插件的内容。我为了简洁而省略了ajax电话。它填充变量“items。”
编辑:我修改了从ajax调用返回的结果,只返回文件名,然后使用两个不同的列名(名称和文件名)返回文件名(两次),在这两种情况下,插入的值都是NULL。它只是不想插入文本值。
我也尝试在tab-basic和linkType之间的内容和元素(交替)下更改id的值,我在JS控制台中遇到一个错误,无法读取未定义的属性getValue。诅咒再次被挫败!
另一个编辑:我尝试将文件的名称放在数据库表中,然后将其返回到插件而不是目录列表。如果我选择filename,attachmentid(按此顺序),OPTION框列出attachmentid,并插入文件名。如果我选择attatchmentid,文件名就会完全相反。那么我想,如果我选择了两次文件名怎么办?所以我选择了filename,filename作为filename2。它的工作原理!这仍然不是一个理想的解决方案,所以我希望有人知道这样做的正确方法。
CKEDITOR.dialog.add('attachfileDialog',function(editor){
return {
title:'Attach File',
minWidth:400,
minHeight:200,
contents:[{
id:'tab-basic',
label:'Choose File',
elements:[{
type:'select',
id:'linkType',
label:'Choose File',
items:items,
'default':''
}]
}],
onOk:function(data){
var dialog = this;
var componentType = dialog.getValueOf('tab-basic','linkType');
var selectedText = editor.getSelection().getSelectedText();
if(componentType != ''){
editor.insertText('[[' + componentType + ']]');
}
}
};
});
我实际上是从另一个插件复制了它并修改它以适应,所以我承认我不太清楚我在这里做什么。我已经通过CKEditor文档进行了挖掘,但它们并没有特别有用。
变量componentType将返回文件大小。我只是不确定如何让它抓取文本而不是值;如果您查看源,则具有文件大小的值,文本是文件名。
有什么想法吗?谢谢!