Ich habe einen einfachen modalen Dialog, der eine Instanz von TinyMCE enthält. Dieses Modal wird jedes Mal dynamisch erstellt, wenn es geöffnet wird, und der Dialog (und das Element) werden beim Schließen des Dialogs zerstört und entfernt.
Beim ersten Öffnen des Dialogfelds ist alles in Ordnung. Das Formular wird geladen (Ajax-Aufruf), uniform wird auf das Formular angewendet und TinyMCE wird auf das Textfeld angewendet. Ich kann alle Aktionen gut durchführen. Alle nachfolgenden Zeiten, die ich das Formular öffne, wiederholt sich der Prozess, mit dem Unterschied, dass, obwohl TinyMCE auf das Textfeld angewendet wird, ich es nicht mehr eingeben kann.
Dies ist in einer Methode, die auf Link-Klick ausgelöst wird:
%Vor%Wenn die Vorlage geladen wird, wenden die letzten Zeilen TinyMCE auf die Textfläche in der geladenen Form an:
%Vor%Dies verwendet das JQuery-Plugin für TinyMCE, um den Editor in alle Textbereiche mit einer Klasse von tinyMCE zu laden, was wie vorgesehen funktioniert.
Ich habe verschiedene Fragen zu StackOverflow zu ähnlichen Problemen gelesen, aber keine, die eine Antwort auf dieses Problem gegeben haben. Hat jemand irgendwelche Ideen?
Nachverfolgung : Ich habe einen Ausgabevergleich zwischen dem ersten geöffneten Dialog und den folgenden Öffnungen durchgeführt und etwas bemerkt. Beim ersten Laden und wenn TinyMCE auf den Textbereich angewendet wird, sehe ich, dass die Anwendung einen IFrame erstellt, eine Tabelle mit einer Zeile für das Menü und eine Zeile mit einem zusätzlichen IFrame geladen hat. Der Inhalt dieses iframes (beim ersten Laden) sieht so aus:
%Vor%Aber bei nachfolgenden Ladevorgängen bekomme ich das Menü, aber dieser interne Iframe sieht so aus:
%Vor%Was könnte das verursachen?
Update 2 : Nach den Vorschlägen von Patricia habe ich das Close-Ereignis meines Dialogs folgendermaßen geändert:
%Vor%Mit einigen Schritt Debugging und FireBug, habe ich bestätigt, dass der Editor zerstört wird, und dann das Textfeld vollständig entfernt, vor dem Zerstören des Dialogs und Entfernen der div. Allerdings kann ich den Dialog neu initialisieren. Ich kann immer noch nicht die neue TinyMCE-Instanz eingeben, wobei der zugrunde liegende Code wie meine letzte Aktualisierung angezeigt wird. Es scheint nicht mit einer unsachgemäßen Zerstörung des vorherigen Elements in Verbindung zu stehen.
Update: Patricias letzter Vorschlag war, den Ajax-Aufruf, der das Formular in den Dialog lädt, in eine .load () -Methode zu verschieben und dann den Dialog zu erstellen. Ich habe das versucht, und die Dinge gingen schnell nach Süden. Der Remote-Inhalt enthält ein Skript, das ausgeführt werden muss, daher das Skript dataType für die Methode .ajax (). Die .load () -Methode hat diese Option nicht und es hat ihr wirklich nicht gefallen. Also jetzt bin ich mir nicht sicher, was ich als nächstes versuchen soll.
Ich bin auf ein ähnliches Problem gestoßen, als ich eine Schaltfläche verwende, um einen Abschnitt zu aktualisieren.
Sie müssen die tinyMCE-Steuerelemente vollständig zerstören, bevor Sie sie erneut instanziieren.
Ich verwende diese Logik in meinem Refresh-Button-Handler:
%Vor%für Dialoge habe ich den "close" Handler wie folgt eingerichtet:
%Vor%Einer davon sollte das Problem für Sie beheben!
BEARBEITEN:
Ich habe keine Ahnung, ob das das Problem ist oder nicht, aber:
%Vor%doing .html ('') säubert die Dinge nicht gut. Sie sollten stattdessen .empty () verwenden. vielleicht gibt es einige streunende Handler oder etwas, das nicht vollständig aufgeräumt wird.
Sie können auch versuchen, die $ (this) .remove (); zu Ihrem nahen Handler.
Das hat für mich funktioniert.
%Vor%Sie müssen diesen Code nur ausführen, nachdem Sie den Dialog geöffnet haben. Ich benutze jq_tinymce, um es wissen zu lassen, welche Textfelder init sind. Mit einem Attribut "data-tinymce_theme" auf dem html-Tag können Sie ein ynymce-Thema angeben.
toggle_editor ist
%Vor%}
Ich musste sicherstellen, dass meine tinymce init nach der Dialogkonfiguration ausgeführt wurde. Das hat das Problem für mich behoben.
%Vor%