2014-05-12 73 views
0

使用ckeditor編輯內聯文本。我發現的問題是,當ckeditor「關閉」或再次隱藏時,我沒有看到看到事件的防禦方式。正常的行爲是將一個元素設置爲true,這會在編輯器點擊它時預先編輯。CKeditor - 內聯事件和回調

我想要的是通過自定義事件啓動編輯器,如雙擊,一旦編輯器「關閉」/隱藏,我想從元素中刪除ckeditor實例,以便它變成「正常」再次。但我沒有看到那個地方,確定你可以使用.blur()事件,但我不認爲這是一個好主意。

所以目前什麼Im做是爲監聽DBLCLICK事件,然後:

edit: (e) => 
    f = $(e.currentTarget) 
    f.attr "contenteditable", true 
    id = f.attr("id") 
    $("##{id}").draggable({ disabled: true }) 
    $("##{id}").resizable({ disabled: true }) 
    if CKEDITOR.instances[id] 
     CKEDITOR.instances[id].destroy(); 
    editor = CKEDITOR.inline id 
    $(e.currentTarget).focus() 


element.blur((el) => 
    f = $(el.currentTarget) 
    CKEDITOR.instances[f.attr("id")].destroy(); 
    f.removeClass 'cke_focus' 
    f.addClass 'cke_editable' 

如果有一個本地的回調,多數民衆贊成你知道ckeditr隱時現我會愛,也許我在想念呢? ?

回答

1

好的,這裏是我閱讀文檔後做的,如果有人想知道這個。請記住,這是一個backbone.js應用程序:

({ 
    edit: (function(_this) { 
    return function(e) { 
     var editor, f, id, o_html, pk; 
     f = $(e.currentTarget); 
     f.attr("contenteditable", true); 
     id = f.attr("id"); 
     pk = f.data("pk"); 
     $("#" + id).draggable({ 
     disabled: true 
     }); 
     $("#" + id).resizable("destroy"); 
     editor = CKEDITOR.inline(id); 
     o_html = ""; 
     editor.on("dataReady", function() { 
     return editor.focus(); 
     }); 
     editor.on("focus", function() { 
     return o_html = f[0].innerHTML; 
     }); 
     return editor.on("blur", function(e) { 
     var n_html, view; 
     console.log(o_html); 
     n_html = f[0].innerHTML; 
     if (o_html !== n_html) { 
      console.log("update data on server"); 
     } 
     editor.destroy(); 
     $("#" + id).draggable({ 
      disabled: false 
     }); 
     view = new PageView; 
     return view.initResizable(id); 
     }); 
    }; 
    })(this) 
});