setData命令不是每次都将我的数据设置为CKEDITOR

时间:2014-11-11 10:15:30

标签: javascript ckeditor

          CKEDITOR.replace('editor1', {
        contentsCss: '../assets/global/plugins/bootstrap/css/bootstrap.min.css',
        toolbar:
            [
                { name: 'document', groups: ['mode', 'document', 'doctools'], items: ['Source', '-', 'Save', 'NewPage', 'Preview', '-', 'Templates'] },
                { name: 'clipboard', groups: ['clipboard', 'undo'], items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'] },
                { name: 'editing', groups: ['find', 'selection', 'spellchecker'], items: ['Find', 'Replace', '-', 'SelectAll', '-', 'Scayt', 'ImageButton'] },
                { name: 'links', items: ['Link', 'Unlink', 'Anchor'] },
                '/',
                { name: 'basicstyles', groups: ['basicstyles', 'cleanup'], items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat'] },
                { name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi'], items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language'] },
                '/',
                { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },
                { name: 'colors', items: ['TextColor', 'BGColor'] },
                { name: 'insert', items: ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe', 'ShowBlocks'] }
            ]
    });



    MyAjaxMethod('GetDatabyId', IdParam, function (data) {
        var dt = data.d;
        if (dt!= null) {


            $("#foo").html(dt.asd);
            $("#foo2").val(dt.asdf);
            $("#foo3").val(dt.asdfg);

            CKEDITOR.instances.editor1.setData(dt.Detay);

        }
        else {
            alert('no data');
        }
    });

它需要获取数据并设置一些formtools并最终设置CKEDITOR,但它有时不会将数据设置为CKEDITOR,有时也会。我尝试了一个简单的页面,使用相同的ajax方法和脚本,但它没有用,为什么会这样?我可以看到所有数据传入,json很好。我试图发送给CKEDITOR的html和inserthtml也没有用。我认为它在尝试替换CKEDITOR之前尝试设置,但我无法做任何事情。

编辑:我该如何解决这个问题? (澄清我的具体问题)

Edit2:由于发现了ojovirtualtorun问题,在设置数据之前确定该实例已准备就绪。

2 个答案:

答案 0 :(得分:6)

只有在实例准备就绪时才应使用setData。它仅在某些情况下有效,因为当您致电setData时,CKEDITOR有时并未完全初始化,而其他一些则完全初始化。

您可以使用名为instanceReady的事件来设置数据:

CKEDITOR.on("instanceReady", function(event)
{
    CKEDITOR.instances.editor1.setData(dt.Detay);
});

CKEDITOR docs

答案 1 :(得分:1)

你应该尝试,为准备部分创建函数,尝试在setData之前运行。

function prepCkeditor()
{
          CKEDITOR.replace('editor1', {
        contentsCss: '../assets/global/plugins/bootstrap/css/bootstrap.min.css',
        toolbar:
            [
                { name: 'document', groups: ['mode', 'document', 'doctools'], items: ['Source', '-', 'Save', 'NewPage', 'Preview', '-', 'Templates'] },
                { name: 'clipboard', groups: ['clipboard', 'undo'], items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'] },
                { name: 'editing', groups: ['find', 'selection', 'spellchecker'], items: ['Find', 'Replace', '-', 'SelectAll', '-', 'Scayt', 'ImageButton'] },
                { name: 'links', items: ['Link', 'Unlink', 'Anchor'] },
                '/',
                { name: 'basicstyles', groups: ['basicstyles', 'cleanup'], items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat'] },
                { name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi'], items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language'] },
                '/',
                { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },
                { name: 'colors', items: ['TextColor', 'BGColor'] },
                { name: 'insert', items: ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe', 'ShowBlocks'] }
            ]
    });
}

您必须确保它在上述代码之前有效。

prepCkeditor();
CKEDITOR.instances.editor1.setData(dt.Detay);