1. 程式人生 > >模態視窗(彈出框)整合CKEditor實戰

模態視窗(彈出框)整合CKEditor實戰

需求背景:
電子合同專案下的合同模板新增頁面中是用layer.js實現的彈出框,也叫模態視窗,用之前的summernote文字編輯器不符合當前編輯合同文字內容的需求(1:字型大小2:字型顏色3:動態表格4:字型加粗)。所以在第二個小版本中調研了CKEditor+UEditor,UEditor也能滿足只是定製化方面和整合難度都不是首選。所以定了CKEditor。
一開始將CKEditor引入系統中的是標準版本結果後面沒有調試出字型的配置工具欄,後面重新引入了full版本,進行了定製化。
引入之後出現了兩個問題
1. CKEditor的初始化問題(CKEditor不能輸入,不可用,沒有游標)
這個問題跟Angularjs,layer彈出框的初始化順序有關。
經過滿哥指導需要每次都重新初始化CKEditor,不然Angularjs就會報錯,說是Ckeditor已經定義初始化了,不能重新初始化。
所以在每次開啟layer的彈出框都要重新初始化。
網上有很多加程式碼成功的案例,在我這裡一個都不好使。
如果不是每次開啟先銷燬CKEditor的話,第一次開啟編輯視窗是好使的,但是第二次就不能輸入了。

contractTemplateIndex = dialog.openDialogFullScreen({title:"編輯合同模板",content:$("#addContractTemplate")});
if (CKEDITOR.instances['ckeditor']) {
    CKEDITOR.remove(CKEDITOR.instances['ckeditor']);
    $("#cke_ckeditor").remove();
}
var editor = CKEDITOR.replace('ckeditor');

執行順序是先執行開啟操作,然後判斷CKEdtor是否已經初始化了,如果初始化的話,則移除初始化的CKEditor,然後重新初始化。
此時開啟編輯視窗可以編輯合同文字。但是不能選擇工具欄中的下拉框,以及設定表格的視窗,這就是第二個問題。

  1. CSS中的z-index屬性
    根據滿哥的除錯,出現某些CKEditor的工具欄無法使用的問題是由於z-index的值有問題。
    http://www.cnblogs.com/ForEvErNoME/p/3373641.html
    具體可以參考上面的連結。
    Layer.js彈出的模態視窗的z-index值比較大,而且非常大,由於z-index值越大就會遮住其他dom值小的視窗,這裡的視窗也叫蒙層,蒙版,是隱藏著的。
    而且layer的彈出層裡有兩個dom節點中都設定了這個屬性,因此在開啟彈出層之後就要重新設定z-index的值。由於這兩個dom節點也有前後之分。所以設定值有區別。整體程式碼如下:
/*$('#summernote').summernote('code', $scope.contractTemplate.templateContent);*/
contractTemplateIndex = dialog.openDialogFullScreen({title:"編輯合同模板",content:$("#addContractTemplate")});
$(".layui-layer").css("height","850px");

$(".layui-layer-content").css("height","800px");
$(".layui-layer-shade").css("z-index","0");
$(".layui-layer").css("z-index","1");
if (CKEDITOR.instances['ckeditor']) {
    CKEDITOR.remove(CKEDITOR.instances['ckeditor']);
    $("#cke_ckeditor").remove();
}
var editor = CKEDITOR.replace('ckeditor');

這裡寫圖片描述

CKEditor的config配置如下:
config.toolbar = ‘Full’; //代表是全版本的CKEditor,同時也有基礎版本的,
// 只有全版本的外掛比較多,支援的工具欄操作也比較多

config.toolbar_Full =
    [
        ['Source','-','NewPage','Preview','-','Templates'],
        ['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker', 'Scayt'],
        ['Undo','Redo','-','SelectAll','RemoveFormat'],
        ['BidiLtr', 'BidiRtl'],
        '/',
        ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
        ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
        ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
        ['Anchor'],
        ['Table','HorizontalRule','SpecialChar'],
        '/',
        ['Styles','Format','Font','FontSize'],
        ['TextColor','BGColor'],
        ['Maximize', 'ShowBlocks','-','About']
    ];

config.toolbar_Basic =
    [
        ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink','-','About']
    ];

這是最簡單的定製,如果要深度定製的話,還可以在config檔案裡面增加詳細的配置。