CKeditor сохранить событие - PullRequest
       10

CKeditor сохранить событие

1 голос
/ 06 января 2011

Я следовал инструкциям, описанным в этом разделе: CKEditor, AJAX Save Я пытался вызвать пользовательское событие save.ckeditor, если кто-нибудь нажмет кнопку AjaxSave.Но мне это не удалось.

ckeditor / plugins / ajaxsave / plugin.js:

(function(){
    var saveCmd =
         {  
            modes : { wysiwyg:1, source:1 },  
            exec : function( editor )  
            {
                editor.fire('saved.ckeditor');
                $(editor).trigger('saved.ckeditor', editor.getData());
                alert(editor.getData());
            }
          }
    var pluginName = 'ajaxsave';
    CKEDITOR.plugins.add( pluginName,
    {
        init : function( editor )
        {
            var command = editor.addCommand( pluginName, saveCmd );
            command.modes = { wysiwyg : !!( editor.element.$.form ) };
            editor.ui.addButton( 'AjaxSave',
            {
                label : editor.lang.save,
                command : pluginName,
                className : 'cke_button_save'
            });
        }
   });  
})();

Если я получу или установлю данные редактора в функции, события get и set будут автоматическибыть уволенным.Но я даже не мог запустить событие getData.ckeditor вручную.

Любые советы?

Другое дело: как отключить кнопку, если содержимое редактора не изменилось послепоследнее сохранение (не грязное)?

Ответы [ 3 ]

0 голосов
/ 09 июня 2013

попробуйте это, вам нужно завершить функцию exec ()

(function() {

    var saveCmd = {
        modes:{wysiwyg:1,source:1 },
        readOnly: 1,

        exec: function( editor ) {
            var data = editor.getData();
            console.info(data);
        }
    };

    var pluginName = 'ajaxSave';

    // Register a plugin named "save".
    CKEDITOR.plugins.add( pluginName, {
        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sq,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh', // %REMOVE_LINE_CORE%
        icons: 'save', // %REMOVE_LINE_CORE%
        init: function( editor ) {

            // Save plugin is for replace mode only.
            if ( editor.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE ) return;

            editor.ui.addButton && editor.ui.addButton( 'Save', {
                label: editor.lang.save.toolbar,
                command: pluginName,
                toolbar: 'document,10'
            });
        }
    });
})();

и не забудьте включить плагин в config.js

config.extraPlugins = 'ajaxSave';
0 голосов
/ 09 ноября 2013

Вы можете редактировать функциональность обычной кнопки сохранения, чтобы делать то, что вы хотите:

html:

<textarea id="CKEditor1"></textarea>

JavaScript:

<script>
    // Need to wait for the ckeditor instance to finish initialization
    // because CKEDITOR.instances.editor.commands is an empty object
    // if you try to use it immediately after CKEDITOR.replace('editor');
    CKEDITOR.on('instanceReady', function (ev) {

        // Create a new command with the desired exec function
        var overridecmd = new CKEDITOR.command(editor, {
            exec: function(editor){
                // Replace this with your desired save button code
                alert(editor.document.getBody().getHtml());
            }
        });

        // Replace the old save's exec function with the new one
        ev.editor.commands.save.exec = overridecmd.exec;
    });

    CKEDITOR.replace('CKEditor1');

</script>
0 голосов
/ 08 января 2011

У меня есть обходной путь.

Снаружи я могу прослушать установленное событие:

window.onload = function()
{
    var ckparams={width: 500, height: 400, resize_enabled:false, extraPlugins: 'ajaxsave',toolbar:[['AjaxSave','Source','-','Bold','Italic','Underline','-','Undo','Redo','-','Find','Replace','-','SelectAll','-','SpellChecker','Scayt','-','About']]};
    //CKEDITOR.replace('editor', ckparams);
    var editor = $('textarea.editor').ckeditor(ckparams);
    $(editor).bind('setData.ckeditor', function() {
        //do what I want
    });
};

... и когда кнопка нажата, установите данные с их текущим значением:

var saveCmd =
  {
    modes : { wysiwyg:1, source:1 },
    exec : function( editor )
    {
        editor.setData(editor.getData());
    }
}

Таким образом, по крайней мере, событие запускается ... Но я должен быть осторожен, когда вручную устанавливаю контент извне ...

...