Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

CKEditor / jQueryUI - Error beim zweiten Start des Editors

Diskussion: CKEditor / jQueryUI - Error beim zweiten Start des Editors im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Guten Abend! Im Moment arbeite ich für eine Vereinsverwaltungssoftware an einer Implementation eines GUIs für die Erstellung von Druckvorlagen ...

Antwort
Alt 20.07.11, 19:49   #1 (permalink)
 
Benutzerbild von she3p
 
Registriert seit: 07.05.07
she3p Leistung: 8086
Likes: 19
Standard CKEditor / jQueryUI - Error beim zweiten Start des Editors

Anzeige

Guten Abend!

Im Moment arbeite ich für eine Vereinsverwaltungssoftware an einer Implementation eines GUIs für die Erstellung von Druckvorlagen wie Serienbriefe oder aber auch Rechnungen. Dabei werden auf einer Seite (pages) droppable sections (zones) verteilt, welche dafür da sind dynamische und statische Elemente (elements) zu platzieren.

Als Beispiel für elements zu nennen wäre Text, Bilder, dynamische Rows (für Rechnungsposten) etc..

Das editieren eines solchen elements (in diesem Fall Text) ist mithilfe eines jQueryUI-Dialogs umgesetzt. Das heisst, in einem solchen Dialog wird ein FCKeditor gestartet, mithilfe dessen der Text angepasst werden soll.

Soweit so gut, funktioniert auch ohne Probleme. Es failt erst dann, wenn ich versuche zum zweiten Mal eine Instanz des FCKeditors zu öffnen (das heisst, nach einem erneuten öffnen des Editierdialogs). Irrelevant ob ich genau den gleichen Dialog, oder einen eines anderen elements öffne.

Code:
p is null - ckeditor.js (line 126)
Die weiten des Internets wissen leider nicht allzuviel darüber. Die einzige Möglichkeit habe ich hier gefunden. Wenn ich allerdings umsetze, was er schreibt, so führt das zu einer neuen Fehlermeldung.


Code:
L is null - ckeditor.js (line 97)
Weiter hab ich mich noch nicht gegraben. Auch wenn ich - wie er in seinem Post erwähnte - den Inhalt vor dem initialisieren des Editors einfüge > selbes Resultat.

Nun zur Implementation:

Code:
[...]
var editor = $('<textarea class="ckeditor" />');
var id = 'ckedit_' + ctx.idx;

editor.attr('id', id);
editor.val(ctx.content);

// append textarea with fckeditor enabled
dlg.append(editor);

var instance = CKEDITOR.instances[id];
if(instance)
{
    CKEDITOR.remove(instance);
}

CKEDITOR.replace(editor.get(0), cksettings);
[...]
Ich prüfe also in jedem Fall auf das Vorhandensein derselben Instanz. Tests haben allerdings gezeigt, dass sie nicht mehr existiert, wenn ich den Editor zum zweiten Mal starte. Aber sicher ist sicher.

Das schliessen des Dialogs habe ich wie folgt gemacht

Code:
[...]
this.dlg.dialog(
{
    modal: true,
    width: 800,
    height: 500,
    buttons:
    {
        "Ok": function()
        {
            // hokay!
        },
   
        "Close": function()
        {
            $(CKEDITOR.instances).each(function(idx, editor)
            {
                // destroy editor and remove it from memory
                for(var key in editor)
                {
                    editor[key].destroy();
                }
            });
       
            $(this).dialog('close');
            $(this).dialog('destroy');
        }
    }
});
[...]
Ich destroy()'e also nicht nur alle Editorinstanzen, welche zu diesem Zeitpunkt existieren, ich schliesse und destroy()'e auch den gesamten Dialog. Nur damit niemand auf die Idee kommen könnte, es hätte was mit einem gecachten Dialog im DOM zu tun.
Des weiteren wird die erste Routine immer aufgerufen, wenn ein Dialog geöffnet werden soll, das heisst, der Editor wird immer neu erstellt. Nun es wird wohl einen Grund haben, dass es erst beim zweiten Mal nicht mehr klappt, aber ich steh gerade auf dem Schlauch.
Das einzige was mir noch einfällt, wäre, dass ich die Editorinstanz unvollständig schliesse, oder dass der CKEditor von sich aus Probleme macht.

Zur Veranschaulichung hab ich das Projekt mal auf meinen Server gepappt:

GPO

Und einen kleinen Screenshot hinzugefügt, auf dem ersichtlich ist, welche Buttons gedrückt werden sollen.



Falls sich jemand die Sources anschaut: Die Dialoge sind in etwa mit einem FactoryPattern implementiert, aber das dürfte nicht die Quelle des Problems sein. Die entscheidenden Files zum Problem dürften zusammengefasst diese sein:

js/jquery.gpo.def.EditDialog.js
js/jquery.gpo.def.EditDialog.Text.js
js/jquery.gpo.def.EditDialogAbstract.js
__________________
she3p ist offline   Mit Zitat antworten
Alt 12.08.11, 14:27   #2 (permalink)
 
Benutzerbild von b4ck
 
Registriert seit: 13.02.06
b4ck Leistung: Z3
Likes: 1
Standard

in diesem thread gibt es einige antworten auf ähnliche probleme: javascript - CKEditor instance already exists - Stack Overflow

zB. wird vorgeschlagen als selektor NICHT die klasse "ckeditor" zu nehmen da es da zu problemen mit jquery internas kommen kann.

Also in deinem Fall:

statt:
Code:
class="ckeditor"
einfach
Code:
 class="gpo_ckeditor"
verwenden.
b4ck ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » JavaScript CKEditor / jQueryUI - Error beim zweiten Start des Editors
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61