Die dynamische Aktualisierung ein TinyMCE 4 ListBox
Ich versuche, ändern Sie den TinyMCE 4 "link" - plugin, um Benutzern zu erlauben, wählen Sie Inhalt von ListBox-Elementen, die dynamisch aktualisiert werden, die von AJAX-Anfragen.
Ich erstelle die ListBox-Elemente im Vorfeld der editor.windowManager.open(), so sind Sie zunächst richtig dargestellt. Ich habe eine onselect-handler, führt die AJAX-Anfrage und bekommt eine Antwort im JSON-format.
Was ich tun muss, mit der JSON-Antwort ist, um es ein weiteres update ListBox-element, ersetzt die bestehende Elemente mit den neuen Ergebnissen.
Ich bin verwirrt, und die Dokumentation ist furchtbar unklar. Ich weiß nicht, ob ich Sie ersetzen sollte, die gesamte Steuerung, oder Positionen löschen und dann neue hinzufügen. Ich weiß nicht, ob ich müssen zu instanziieren Sie ein neues ListBox-Steuerelement, oder machen Sie Sie zu HTML, etc.
Grundsätzlich habe ich Zugriff auf die original-gerendert ListBox (name: "Modul"} mit
win.find('#module');
Habe ich die neuen Werte aus der AJAX-Anfrage:
var data = tinymce.util.JSON.parse(text).data;
Und ich habe versucht, erstellen einer neuen Control-Konfiguration-Objekt, wie
newCtrlconfig = {
type: 'listbox',
label: 'Class',
values: data
};
aber ich würde nicht wissen, wie Sie es machen, viel weniger Sie ersetzen die bereits vorhandenen.
Versuchte ich
var newList = tinymce.ui.Factory.create(newCtrlconfig);
dann
newList.renderHtml()
aber selbst dann, das gerenderte HTML nicht jedes markup enthalten das für die Elemente. Und die Prüfung dieser Objekte ist nur frustrierend: es gibt "Einstellungen", "Werte", "_values", "Elemente", die alle gerne auf meine Werte, aber es ist noch nicht einmal klar, welche von Ihnen funktionieren wird.
Da es eine ListBox und nicht ein einfaches SELECT-Menü, ich kann auch nicht leicht zu verwenden, um das DOM zu manipulieren-die Werte.
Hat jemand erobert den TinyMCE ListBox in 4.x?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich diese auf der TinyMCE-forum und ich habe bestätigt, dass es funktioniert:
Der Schlüssel hier ist, müssen Sie Folgendes tun:
myexample.refresh()
sehe ich 'Mein Vorbild' - Taste, aber es hat keine option ie Liste ist leer. Auch ich kann nicht sehen, diese inmenubar
und musstetoolbar : 'myexample'
zu sehen, die Schaltfläche.button.settings.values = button.state.data.menu = items;
Habe ich versucht die Lösung von TinyMCE forum, aber ich fand es buggy. Zum Beispiel, wenn ich versuchte, zu ändern, die erste ListBox-mehrere Male, nur das erste mal in Kraft trat. Auch die erste änderung, die box direkt nach dem Dialog aufgetaucht ist, gar keine Wirkung.
Aber auf die Lösung:
Nicht nennen
button.menu.remove();
Auch der "hack" für die erste Schaltfläche Verweis ist völlig unnötig. Ihren job getan werden kann, einfach mit:
Mit diesen änderungen, meine Listboxen arbeiten, gerade Recht.
Ganze Dialog-Funktion:
categories
undpagelist
sind JSONs erzeugt aus DB, bevor TinyMCE laden.pagelist[category]
= Daten für Listenfeld für ausgewählte Kategorie. category=0 bedeutet, dass alle.Hoffe, dass ich jemand geholfen, weil ich habe gekämpft, dieses für Stunden.
Sieht es aus wie der tinyMCE-version, die enthalten ist in wordpress 4.3 ein paar Dinge geändert, und fügte hinzu, ein state-Objekt speichert das erste Menü, so wechselt das Menü ist nicht mehr genug.
Wird man wohl haben, aktualisieren Sie die Status-Objekt als gut. Hier ist ein Beispiel für die Aktualisierung das Menü mit den Daten aus einem ajax-request:
ctrl.state.data.menu = ctrl.settings.values = menu;
für mich anstelle von Einstellungen.Menü. Dies ist für WP 4.5.1 und TinyMCE 4.3.10Soweit ich sagen kann, diese anderen Ansätze sind gebrochen in TinyMCE 4.9.
Nachdem er den Großteil des Tages basteln zu beheben meine eigene Nutzung dieser Ansätze, das ist die Funktionalität die ich gefunden habe: