提问人:John 提问时间:5/20/2015 最后编辑:Anna TomanekJohn 更新时间:4/21/2018 访问量:1680
将数据传递到 CKEditor 中的小部件
Passing data to widget in CKEditor
问:
我制作了一个非常简单的自定义小部件,但是我想通过自定义按钮而不是工具栏按钮将其添加到编辑器中,因此我使用 .小部件已正确添加,但如何通过此调用将数据传递到小部件?在文档中,它说第二个参数用于将数据传递给命令处理程序,但是我似乎找不到如何在调用后在小部件代码中访问它。editor.execCommand("mywidget")
execCommand
execCommand
execCommand("mywidget", {paramshere})
谢谢!
答:
1赞
Reinmar
5/20/2015
#1
文档已经针对 CKEditor 4.5.0 Beta 进行了更新,并且通过命令指定小部件数据的能力是此版本的新功能。
因此,从 CKEditor 4.5.0 Beta 开始,这是(将)可能的:
editor.execCommand( 'simplebox', {
startupData: {
align: 'left'
}
} );
但在此版本之前,您需要直接使用 Widget API。查看该命令在 4.5.0 Beta 中的工作原理。有相当多的代码,但其中大部分是关于打开对话框并在将小部件元素插入编辑器之前处理它(它必须保存在某个地方)。
如果您只想插入一个小部件,那么只需按照文档进行操作:
var element = editor.document.createElement( 'div' );
editor.insertElement( element );
var widget = editor.widgets.initOn( element, 'simplebox', { align: 'left' } );
正如你所看到的,widgetsRepository.initOn()
接受数据对象。
评论
0赞
Reinmar
5/20/2015
我更新了文档以避免将来出现这种混淆 - github.com/ckeditor/ckeditor-dev/commit/...
0赞
Dominic
7/22/2015
愚蠢的问题 - 但是我如何在小部件中接收此命令 - 它是 exec 函数吗?根据传递的数据,我需要生成我的模板 - 它可以是一个函数,还是可以在 exec 函数中分配它?@Reinmartemplate
0赞
Dominic
7/23/2015
是的 - 我看到了你写的这篇文章:ckeditor.com/forums/CKEditor/... - 想知道是否有办法拦截该命令并根据通过 execCommand 传递的数据更改模板
0赞
Dominic
7/23/2015
我已经设法做了我需要的事情(通过检查命令名称并分配模板)beforeCommandExec
1赞
deevolution
4/21/2018
#2
当您定义命令时,或者如果您需要修改现有命令,您只需要向 exec 函数添加第二个参数,如下所示:
function myCommandName(data){
this.data = data
}
myCommandName.prototype = {
exec: function(editor, data) {
if(data){
doSomethingWithData(data);
}
}
}
editor.addCommand( 'myCommandName', new myCommandName(optionalDefaultData) )
若要在执行时将数据传递给命令,请将数据作为命令名称后的第二个属性提供。
editor.execCommand('myCommandName', { data: 'my data' });
评论