1

CKEditor を正しく動作させるのに問題があります。

Jquery を使用してインスタンスを挿入しています。そして、エディター用に独自の Ajax 保存機能をセットアップします。

私のインスタンスは常に問題なく挿入されます。エディターは正常に表示され、機能しているように見えます。ただし、インスタンスを挿入すると、テキストエリアが更新されないため、更新されたデータが Ajaxcall に送信されません。古いデータを送信します。

ajax 呼び出しに送信した後、インスタンスを破棄します: CKEDITOR.instances[currentInstance].destroy(); そして、エディターは毎回適切に破棄されているようです。OnClick 次に、エディターを再挿入します (同じインスタンス名。インスタンスを破棄するときにテキストエリアも削除し、インスタンスを再挿入するときにテキストエリアを再挿入します。同じテキストエリア名)。

インスタンスを何度も挿入できる理由を誰か教えてもらえますか?しかし、エディターはテキストエリアを初めて更新するだけですか?

私はもう試した:

for ( var instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement(); }

保存機能に挿入 - ajaxcall の直前。しかし、まだ更新はありません。

これがインスタンスのビルドです。Jquery 経由で、これを html() として挿入します。

<script type="text/javascript">
    CKEDITOR.replace('tekstindhold233',
    { height:'250px',width:'575px' });
</script>

そして、保存機能は次のとおりです。

CKEDITOR.plugins.add('popwebsave',
{
init: function(editor)
{
var pluginName = 'popwebsave';


editor.addCommand( pluginName,
{
exec : function( editor )
{

for ( var i in CKEDITOR.instances ){
   var currentInstance = i;
   break;
}
for ( var instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement(); }

var sprog = $('#lan_holder').text();
var vis = $('#vis_holder').text();
var pageId = $('#pageId_holder').text();
var tekstIndhold = CKEDITOR.instances[currentInstance].getData();
var tekstIndholdBox = currentInstance.replace('tekstindhold','');
var contentOrden = $('#content_orden' + tekstIndholdBox).text();
var dataString = 'lan=' + sprog + '&tekstindhold=' + tekstIndhold + '&eid=' + tekstIndholdBox + '&vis=' + vis + '&id=' + pageId + '&contentOrden=' + contentOrden;

$("#tekstindhold_box" + tekstIndholdBox).animate({ 
    opacity: 0  
        } , { 
    duration: 500,  
    complete: function() {
    $("#textarea_box" + tekstIndholdBox).text('');

$.ajax({
type: "POST",
url: "includes/JQ_opdater_tekst.php",
data: dataString,
dataType: "json",
cache: false,
success: function(databack){  
$("#textarea_box" + tekstIndholdBox).animate({
        height: 100
      }, 500, function() {
        $("#tekstindhold_box" + tekstIndholdBox).html(databack.tekstindhold_db);
        $("#tekstindhold_box" + tekstIndholdBox).animate({
        opacity: 1
      }, 500, function() {

CKEDITOR.instances[currentInstance].destroy();

        });
});

    }

});


        }
    });

},
canUndo : true
});

/*
editor.addCommand(pluginName, 
new CKEDITOR.dialogCommand(pluginName)

);
*/

editor.ui.addButton('Popwebsave',
{
label: 'Gem',
command: pluginName,
className : 'cke_button_save'
});
}
});
4

1 に答える 1

1

どうでも!私はそれを考え出した。インスタンスが DOM に存在する必要があることがわかりました。destroy() では、destroy() が最初に発生するようにイベントの順序を切り替え、次にテキストエリアを削除しました。今は問題なく動作します。

于 2012-07-17T09:16:46.110 に答える