在CKEditor中向小部件传递数据

4
我创建了一个非常简单的自定义小部件,但是我想通过自定义按钮将它添加到编辑器中,而不是通过工具栏按钮,因此我使用editor.execCommand("mywidget")。小部件被成功添加,但是在这个execCommand调用中如何传递数据给小部件呢?在文档中,它说execCommand的第二个参数用于向命令处理程序传递数据,但是我似乎找不到我在调用execCommand("mywidget", {paramshere})之后如何在小部件代码中访问它。

谢谢!

2个回答

1
当您定义命令或需要修改现有命令时,只需向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' });

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' } );

正如您所看到的{{link1:widgetsRepository.initOn()}},它接受数据对象。


我更新了文档,以避免将来出现混淆 - https://github.com/ckeditor/ckeditor-dev/commit/2c51ef1f437c98e9a6a73b545ecba693ba14ecd0 - Reinmar
愚蠢的问题 - 但是我该如何在小部件中接收此命令 - 是exec函数吗?根据传递的数据,我需要生成我的模板 - template可以是一个函数吗?或者它可以在exec函数中分配吗?@Reinmar - Dominic
是的 - 我看到了你发布的这篇帖子:http://ckeditor.com/forums/CKEditor/help-Inserting-a-widget-from-my-own-button -- 想知道是否有一种方法可以拦截该命令并根据通过execCommand传递的数据更改模板。 - Dominic
我已经在 beforeCommandExec 中成功完成了所需的操作(通过检查命令名称并分配模板)。 - Dominic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接