2011-11-01 11 views
9

CKEditor documentation के माध्यम से पढ़ना, मुझे लगता है कि उनके पास CKEDITOR.instances.instanceName.destroy(); के साथ एक उदाहरण को नष्ट करने का विकल्प है। हालांकि, अगर डोम बदल गया है, और पूरे WYSIWYG DOM संरचना हटा दिया गया है, मैं निम्न त्रुटि क्रोम में मिलती है:सीकेएडिटर - डीओएम नोड हटा दिया गया है जब एक उदाहरण को नष्ट करें

Uncaught TypeError: Cannot read property 'document' of null 

... और Firefox में निम्न में से एक:

i.contentWindow is null 

क्या इस के आसपास काम करने का कोई तरीका है?

जिस तरह से मेरा ऐप संरचित है (AJAX के माध्यम से सामग्री लोड हो रहा है), मैं .destroy() पर कॉल नहीं कर सकता जब तत्व पृष्ठ पर अभी भी हैं।

उत्तर

16

यदि आपको एजेक्स कॉल के बाद डीओएम में सीकेडिटर ऑब्जेक्ट और एडमिनेट को नष्ट करने की आवश्यकता है, तो आप फंक्शन कॉल को नष्ट करने (सत्य) में बुलियन पैरामीटर सेट करके इसे कर सकते हैं। इस तरह यह डीओएम अपडेट करने की कोशिश नहीं करेगा:

var editor = CKEDITOR.instances[name]; 
if (editor) { editor.destroy(true); } 
CKEDITOR.replace(name); 

मैंने इन कार्यों को थोड़ा बेहतर नियंत्रित करने में सक्षम होने के लिए 2 कार्य लिखे हैं। सूचना है कि मैं इन कार्यों से पहले एक चर घोषणा की है इस्तेमाल किया जा सकता है, लेकिन वहाँ बहुत बरसाती कोट तरीके हैं, लेकिन इस दृष्टिकोण उद्देश्य मैं इसे जरूरत के लिए काफी अच्छा था (मैं का उपयोग करें और केवल एक उदाहरण की जरूरत है):

if(typeof(editor) == 'undefined') 
     var editor=null; 

    function ck_delete(editor) 
    { 
     if(typeof(editor) != 'undefined' && editor!=null) 
      editor.destroy(); 
    } 

    function ck_init(ck_inst_name) 
    { 
     var el_id=document.getElementById(ck_inst_name); 
     if(typeof(el_id) != 'undefined' && el_id!=null) 
     { 
      if(typeof(editor) == 'undefined' || editor==null) 
      { 
       editor=CKEDITOR.replace(ck_inst_name); 
      } 
      else 
      { 
       ck_delete(editor); 
       editor=null; 
       editor = CKEDITOR.replace(ck_inst_name); 
      } 
     } 
    } 

मैं यह भी जांचता हूं कि एक HTML तत्व जिसे प्रतिस्थापित किया जाना चाहिए, इसलिए मुझे कोई त्रुटि संदेश नहीं मिला है।

+0

यह मेरे लिए एक समान (वही?) समस्या हल करता है (AJAX कॉल की वापसी के आधार पर सीकेडिटर को प्रतिस्थापित करता है) लेकिन मुझे अभी भी अनकॉट टाइप एरर (ओपी में जैसा ही) मिलता है। मुझे यकीन नहीं है कि क्या कोई दुष्प्रभाव हैं लेकिन मैं त्रुटि संदेश से छुटकारा पाना चाहता हूं। संपादक को लोड करने के लिए मेरा कोड है: window.makeCkEditor = function(e, w, h) { var cki, config, ei; ei = CKEDITOR.instances[e]; if (ei) ei.destroy(true); config = { width: w, height: h }; return cki = CKEDITOR.replace(e, config); }; किसी भी विचार पर मैं संदेश से कैसे छुटकारा पा सकता हूं? –

+0

@ केन थॉम्पसन: मेरे पास थोड़ा अलग दृष्टिकोण है, लेकिन क्या आपने एजेक्स कॉल से पहले सीके ऑब्जेक्ट को नष्ट करने की कोशिश की है? –

+0

नष्ट (सत्य) काम करने लगता है:) – bjunix

2

आप http://dev.ckeditor.com/ticket/8226 पर पैच में से एक को लागू कर सकते हैं और यह काम करेगा। मैं यह सुझाव देता हूं: http://dev.ckeditor.com/attachment/ticket/8226/8226_5.patch

+0

मैं कमांड लाइन के लिए थोड़ा नया हूं; मैं इस पैच को कैसे लागू करूं? मैं विंडोज 7 x64 पर चल रहा हूँ। –

+0

ऐसा करने के लिए यह बहुत जटिल हो सकता है। जिस तरह से मैं काम करता हूं वह एक एसवीएन प्रतिलिपि है, यह TortoiseSVN के साथ आसान है, फिर फ़ोल्डर पर संदर्भ मेनू का उपयोग पैच विकल्प का उपयोग करें और इसके बाद आपको सभी सीकेएडिटर कोड को दोबारा लोड करना होगा (इसलिए आपको जावा स्थापित करने की भी आवश्यकता है)। यह एक शर्म की बात है कि आपको उन सभी चरणों को करने की आवश्यकता है क्योंकि उन्हें पैच पसंद नहीं आया और कुछ और जटिल जटिल प्रस्ताव दिया गया है कि अंत में जोड़ा नहीं गया है। – AlfonsoML

+0

ठीक है, क्योंकि मैं एसवीएन का उपयोग नहीं कर रहा हूं, इसलिए मैं 'पैच' फ़ाइल के माध्यम से गया, और मैन्युअल रूप से उन सभी परिवर्तनों को बनाया। अब, वे सभी परिवर्तन '_source' फ़ोल्डर के अंतर्गत थे। मुझे लगता है कि 'ckeditor.js' किसी भी तरह से उन सभी फ़ाइलों से संकलित/संक्षिप्त/संपीड़ित है। मुझसे यह कैसे होगा? –

1

हमें पॉपअप संवाद में, GWT में CKEDITOR को एकीकृत करने में यह समस्या थी। जब संवाद नष्ट हो गया, तो CKEDITOR ने यह त्रुटि उठाई - "संपत्ति को पढ़ नहीं सकता 'दस्तावेज़' शून्य '। समाधान बंद करने से पहले सीकेईडीआईटर को नष्ट करना था। (हमें इसे ओवरराइड करने के लिए जीडब्ल्यूटी सीकेडिटर क्लास का विस्तार करना था - एरिक द्वारा दिए गए editor.destroy (true) वाक्यविन्यास का उपयोग करके - धन्यवाद, एरिक!)

+1

कोई समस्या नहीं, खुशी है कि मैं मदद कर सकता हूं –