2

コンテンツ編集ページに CKEditor のインスタンスがあります。CKEditor インスタンスを再利用またはリセットしようとしています。

使用事例

各セルが編集可能なテーブルがあります。ユーザーがセルをクリックすると、編集機能を提供する CKEditor が表示されます。

を使用してデータを設定していますCKEDITOR.instances.cellContent.setData( cellContent );

でデータを取得していますvar cellContent = CKEDITOR.instances.cellContent.getData();

これはうまく機能しますが、CKEditor は、呼び出した後も古いコンテンツがあると認識します。setData()

  1. ユーザーがセル #1 をクリックする
  2. ユーザーはセル #1 を編集し、単語に「赤」の色を使用します
  3. ユーザーがセル #1 を保存する
  4. ユーザーがセル #2 をクリックする
  5. 現在、CKEditor はアクティブ/使用中として「赤」の色を表示します。しかし実際には、その色が使用されてから、他のコンテンツがエディターに読み込まれたためではありません。

CKEditor インスタンスをリセット、再利用、または (効率的に) 再インスタンス化する方法を知っている人はいますか?

(Googleはこれについて私を助けませんでした)

一緒に考えてくれてありがとう!

更新 1

各テーブル セルの編集に再利用される単一のエディター インスタンスを使用しています。(非アクティブの場合は、含まれる要素に display:none を設定することで非表示になります)

更新 2

Mac 用の firefox 13.0.1 を使用しています。この色の問題は Chrome では発生しませんが、太字/斜体のボタンでも同じ問題が発生します。

4

1 に答える 1

2

新しい要素でエディターを再インスタンス化することはできません。1 つのインスタンスは、その存続期間中、編集可能な 1 つのインスタンスにバインドされます。

エディターを初期化する方法については言及していません。セルにエディターを配置したいので、テーブル セルごとに? または、テーブルの外に 1 つのエディターがあり、クリックしたセルのコンテンツをそこにロードして、blur/change/etc で更新したいだけです。

最初のオプションを選択した場合は、テーブル セルごとにエディター インスタンスを作成する必要があります。ページの読み込み時にこれを行う必要はありません。セルのクリック時にこれを行う方がよいでしょう。ユーザーがセルを離れるときに、エディターを破棄する必要はありません ( editor#destroy)。エディターを非表示にして、後で同じセルに再利用することをお勧めします。

2 番目のオプションを選択した場合は、setData/getDataエディターの UI (ボタンの状態) を更新するのに十分なはずです。今確認しましたが、これはバグのようです。幸いなことに、データを設定した後に呼び出すことで簡単に修正できeditor#focusます-その後、UIが更新されます(少なくとも私の簡単なテストでは)。うまくいかない場合は、コンソールから手動でテストしていたため、フォーカスを遅らせてください。デフォルトでは遅延していました。

于 2012-06-28T07:24:22.860 に答える