2010-08-10 38 views
18

Làm cách nào để tìm hiểu xem CKEditor có được tải không? Tôi đã xem qua các tài liệu API, nhưng chỉ có thể tìm thấy sự kiện được tải. Tôi muốn kiểm tra xem CKEditor có được tải hay không, bởi vì nếu tôi tải nó lần thứ hai, văn bản của tôi sẽ biến mất.Cách xác định xem CKEditor có được tải không?

Trả lời

1

Tôi đã xem qua các tài liệu API, nhưng chỉ có thể tìm thấy sự kiện được tải.

Tôi không biết liệu có tồn tại thuộc tính cụ thể cho việc này hay không - có thể! - nhưng bạn có thể sử dụng sự kiện đã tải để đặt cờ chung. Nó không thực sự tốt đẹp nhưng sẽ làm công việc.

// At the top of the script 
CKEDitor_loaded = false; 

// then later 
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; }); 

Thay vì một biến toàn cầu, bạn cũng có thể xem xét việc thiết một cái gì đó bên trong CKEDITOR:

CKEDITOR.flag_loaded = true; 

Đây sẽ là một chút bụi.

+0

Và làm cách nào để tôi hủy tải tất cả các phiên bản? – friedkiwi

+0

@Yvan Tôi không biết. Tại sao bạn cần phải làm điều đó? –

+0

vì nếu tôi tải một lần hai lần, trang của tôi bị hỏng và cần làm mới. Kể từ khi ứng dụng của tôi là hoàn toàn AJAX điều khiển, đó là không tốt. – friedkiwi

24

Sự kiện loaded không hoạt động đối với tôi. instanceReady đã hoạt động:

CKEDitor_loaded = false; 

CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; }); 
+3

Chưa có CKEDITOR, vậy làm thế nào tôi có thể phát hiện nó? nó không cháy bất cứ điều gì khi đã sẵn sàng chưa? –

+0

Bạn có thể thử đặt nó trong JS fiddle không? –

+0

Nếu cửa sổ kích hoạt "ckeditorReady", tất cả sẽ vui vẻ. Tôi quên đề cập đến rằng tôi đang tải nó theo yêu cầu thông qua ajax (trong một thẻ cha với một updater PrototypeJS). Nó sẽ được lộn xộn để dán tất cả những gì nhưng những gì nó làm là điều này: khi updater kết thúc (onComplete) nó khởi tạo chính nó và trẻ em. Và trong việc khởi tạo của đứa trẻ có liên quan, tôi đã làm điều này: http://jsfiddle.net/yzxWv/2/ –

0

Tôi biết đây là một bài đăng rất cũ, nhưng trong nghiên cứu của tôi, nó tiếp tục phát triển. Tôi đang tải động CKEditor qua jQuery. Tôi không muốn tải nó nhiều lần kể từ khi mọi thứ bắt đầu xảy ra, như bạn phát hiện ra.

Giải pháp đơn giản:

if (!window.CKEDITOR) { 
    // (not loaded yet, your code to load it) 
} 
3
var waitCKEDITOR = setInterval(function() { 
    if (window.CKEDITOR) { 
     clearInterval(waitCKEDITOR); 
     //CKEDITOR.replace(...); 
    } 
}, 100/*milli*/); 
0

Hope this helps một ai đó.

Tôi cũng tải đoạn mã trang có chức năng CKEDITOR qua AJAX và vì vậy tôi đã gặp phải nhiều vấn đề được nêu trong câu hỏi này. Đây là giải pháp của tôi:

function setCk(id){ 
if(window.CKEDITOR){ 
    var _instId = CKEDITOR.instances[id]; 
    if(_instId == undefined){ 
     CKEDITOR.inline(id); 
    }else{ 
     CKEDITOR.instances[id].destroy(); 
     CKEDITOR.inline(id); 
    } 
} 

}

Trên mỗi phản ứng AJAX cho đoạn này tôi tiêm một yếu tố kịch bản vào đầu với một cuộc gọi đến setCk (textareaId). Bí quyết là hủy mọi phiên bản CKEDITOR trước đó cho ID mục tiêu & lại CKEDITOR sau mỗi lần nạp đoạn mã AJAX.

Các vấn đề liên quan