CKEditor 4在对话框中动态选择
正在尝试找出如何在对话框中动态填充选择菜单。。。到目前为止,在我所有的尝试中,我都未能使它正常工作。鲍勃 下面是一个更改现有选择菜单项的代码段。但是,您可以添加自己的、动态获取值等CKEditor 4在对话框中动态选择,ckeditor,ckeditor4.x,Ckeditor,Ckeditor4.x,正在尝试找出如何在对话框中动态填充选择菜单。。。到目前为止,在我所有的尝试中,我都未能使它正常工作。鲍勃 下面是一个更改现有选择菜单项的代码段。但是,您可以添加自己的、动态获取值等 //for button we just want to limit the button type to button if ( dialogName == 'button' ) { // updates the info tab var infoTab
//for button we just want to limit the button type to button
if ( dialogName == 'button' ) {
// updates the info tab
var infoTab = dialogDefinition.getContents( 'info' );
var typeDef = infoTab.get( 'type' );
var buttonType = new Array("Button", "button");
var myItems = new Array (buttonType);
typeDef['items'] = myItems;
如果没有帮助,请提供实际结果与预期结果的其他详细信息。我认为您要做的是在您的列表中动态填充一个下拉列表 插件。无论出于何种原因,在 对话框已打开 如果是这样,下面是我为类似情况所做的:
{
type: 'select',
id: 'exam_ID',
label: 'Select Exam',
items : [ ['--- Select an Exam---',0] ],
setup : function(element) {
var element_id = '#' + this.getInputElement().$.id;
$.ajax({
type: 'POST',
url: 'lib/ckeditor/plugins/customExam/utilities/listExams.aspx',
data: '{"cpID":' + window.parent.$("#cpID").val() + '}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
success: function(data) {
$.each(data.DATA, function(index, item) {
$(element_id).get(0).options[$(element_id).get(0).options.length] = new Option(item[1], item[0]);
});
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
}
});
}
}
关键是找到CKEditor设置的元素ID,它不是元素定义中的ID
。您可以将该id
用于其他函数,但如果您计划对元素进行任何更新,则需要获取CKEditor DOM元素
也许有更好的方法可以做到这一点,但这对我来说很有效
elements: [
{
type: 'select',
id: 'test',
label: 'test label',
items: [
['Please Choose', '']
],
onLoad: function(element) {
this.add('Option 1', '1');
this.add('Option 2', '2');
}
}
]
若要在对话框打开进行编辑时添加或删除项目。您可以使用setup
call。将其置于onLoad
定义的上方或下方
setup: function(element) {
this.clear();
this.add('Please Choose', '');
this.add('Option 1', '1');
this.add('Option 2', '2');
this.setValue(element.getText());
},
使用add()方法并在列表中选择正确项的改进代码
{
键入:“选择”,
标签:“选择页面”,
id:'localPage',
项目:[['',][],
设置:功能(数据){
var self=这个;
$.get('/pages.php',函数(项){
items.forEach(功能(项目){
添加(项目[0],项目[1]);
});
if(data.localPage){
self.setValue(data.localPage | |“”);
}
}).fail(函数(){
警报('获取页面时出错');
});
},
}
pages.php示例脚本:
$pages=[
['Contact','{!!page:4!!}'],
['About','{page:5!!}'],
['homepage','{!!page:1!!}'],
];
返回json_encode($pages);
我想动态填充一个select,例如:示例:`CKEDITOR.dialog.add('foo',函数(编辑器){return{title:'test',resizeable:CKEDITOR.dialog_RESIZE_两者,minWidth:500,minHeight:400,contents:[{类型:'select',标签:'selectanexamine:',宽度:200,项目:[[one',1],[two',2]}]};})`你的片段很有帮助。。。但基本上我需要做的是通过一个外部源来填充选择菜单,比如ajax调用。。。这似乎不是一个简单的方法。如果没有,是否可以将我想做的所有事情“包装”到一个点击另一个网页的iframe中。这将使我不必处理编辑器中繁琐的定义。我不确定我是否理解,是什么阻止了您进行AJAX调用?这些OnDefinition只调用一次,而不是每次用户单击插件时调用。或者在启动期间加载数据,并将其存储在数据或其他地方,然后使用它。我注意到在设置:
中,您没有使用元素
参数,可以吗?我不知道为什么,但在使用ckeditor 4.5.4时,我必须使用onLoad
事件,而不是设置
。