2011-09-20 7 views
1

私は、複数のhtmlページを持っています。それには、div要素がたくさんあります。 CKEditorバージョンのインスタンスは、そのフォーカス(ぼかしイベントを)失った場合、私は別々にコンテンツを投稿する必要があり、CKEditor:どのようにぼかしのインスタンスを破壊する?

$('.editable').click(function() { 
    editor = CKEDITOR.replace(this); 
}); 

今:ユーザーがdiv上でクリックするたびに、その場でCKEditorに置き換えられますスクリプトアヤックス(何かが変化したか)を介して、このインスタンスを破棄:

$('.editable').click(function() { 
    editor = CKEDITOR.replace(this); 
    editor.on('blur', function(e) 
    { 
     if (e.editor.checkDirty()) 
      // get data with e.editor.getData() and do some ajax magic 

     e.editor.destroy(); 
    }); 
}); 

しかし、destory()checkDirty()前に呼び出されますなぜ私は知らない、ので、この例では動作しません。どうすればこの問題を解決できますか?

答えて

0

destroy()if()の文章の中に入れたらどうですか?何も変更されていなければdestroyを呼び出すelse節を持つことができます。何かが変更された場合、データが転送されると、if節内でdestroy()を呼び出すことができます。

$('.editable').click(function() { 
    editor = CKEDITOR.replace(this); 
    editor.on('blur', function(e) 
    { 
    if (e.editor.checkDirty()) { 
     // get data with e.editor.getData() and do some ajax magic 
     if (dataTransferComplete) { 
     e.editor.destroy(); 
     } 

    } else { 
     e.editor.destroy(); 
    } 
    }); 
}); 

それともdestroy()を呼び出す前に変数をチェックすることができます。データ転送が完了し、else節でその変数をtrueに設定すると、変更点を確認して更新データを転送するまでdestroy()が呼び出されません。

$('.editable').click(function() { 
    editor = CKEDITOR.replace(this); 
    editor.on('blur', function(e) 
    { 
    var okToDestroy = false; 

    if (e.editor.checkDirty()) { 
     // get data with e.editor.getData() and do some ajax magic 
     okToDestroy = true; 
    } else { 
     okToDestroy = true; 
    } 

    if (okToDestroy) 
     e.editor.destroy(); 

    }); 
}); 

これは概要ですが、私はコードをテストしていませんが、その概念を示しています。

ウェルウェル、
ジョー

関連する問題