Das dhtmlxGantt Chart unterstützt das Rückgängigmachen und Wiederherstellen von Änderungen innerhalb des Diagramms. Um diese Funktion zu aktivieren, aktivieren Sie das undo-Plugin mit der gantt.plugins-Methode.
gantt.plugins({
undo: true
});
Standardmäßig sind sowohl Undo als auch Redo aktiviert. Sie können das Verhalten von Undo/Redo über die Konfigurationsoptionen undo und redo steuern.
Undo und Redo können auch unabhängig voneinander verwendet werden, indem Sie eines von beiden deaktivieren:
// hier ist nur Redo aktiviert
gantt.config.undo = false;
gantt.config.redo = true;
Related sample: Undo/Redo changes in Gantt
Um Änderungen im Gantt Chart rückgängig zu machen, verwenden Sie die undo-Methode:
gantt.undo();
Um rückgängig gemachte Änderungen wiederherzustellen, verwenden Sie die redo-Methode:
gantt.redo();
Ab Version 6.3 sind die Methoden undo()/redo() auch über das gantt.ext.undo-Objekt zugänglich. Weitere Informationen finden Sie im Artikel Undo-Erweiterung.
Benutzeraktionen im Gantt Chart werden als Arrays von Befehlsobjekten gespeichert. Gantt führt einen Stapel der zuletzt ausgeführten Befehle. Die undo-Erweiterung verarbeitet diese Befehle, um Rückgängig-Operationen auszuführen.
Beim Rückgängigmachen oder Wiederherstellen nimmt die Erweiterung das zuletzt ausgeführte Befehlsobjekt und führt die entsprechende Methode aus.
Um den Stapel der Undo-Aktionen abzurufen, verwenden Sie die getUndoStack-Methode:
var stack = gantt.getUndoStack();
Um den Stapel der Redo-Aktionen zu erhalten, verwenden Sie die getRedoStack-Methode:
var stack = gantt.getRedoStack();
Der zurückgegebene Stapel ist ein Array von Benutzeraktionen. Jede Aktion enthält eine Gruppe von Befehlen:
Jeder Befehl ist ein Objekt mit diesen Eigenschaften:
Hier ein Beispiel zur Veranschaulichung:
Die getUndoStack()-Methode gibt einen Stapel mit 2 Undo-Aktionen zurück. Die erste enthält 3 Befehle, die zweite einen Befehl.
Ab Version 6.3 sind die Methoden getUndoStack()/getRedoStack() ebenfalls über das gantt.ext.undo-Objekt verfügbar. Weitere Informationen finden Sie im Artikel Undo-Erweiterung.
Sie können die Undo/Redo-Befehlsstapel mit den entsprechenden Gantt-API-Methoden leeren.
Um den Undo-Stapel zu leeren, verwenden Sie die clearUndoStack-Methode:
gantt.clearUndoStack();
Um den Redo-Stapel zu leeren, verwenden Sie die clearRedoStack-Methode:
gantt.clearRedoStack();
Ab Version 6.3 sind die Methoden clearUndoStack()/clearRedoStack() ebenfalls über das gantt.ext.undo-Objekt zugänglich. Weitere Details finden Sie im Artikel Undo-Erweiterung.
Das Rückgängigmachen oder Wiederherstellen von programmatisch vorgenommenen Änderungen ist möglich, indem Sie die Methoden undo()/redo() mit der saveState()-Methode aus dem gantt.ext.undo-Objekt kombinieren.
Da Gantt Änderungen, die direkt im Code vorgenommen werden, nicht automatisch verfolgt, muss es informiert werden, den vorherigen Zustand vor der Änderung zu speichern. Dies geschieht durch einen Aufruf von saveState() vor der Änderung der Aufgabe oder des Links.
Gantt benötigt außerdem ein Signal, dass die Aktualisierungen abgeschlossen sind. Dies erfolgt durch den Aufruf von updateTask() oder updateLink(). So werden der vorherige und der neue Zustand im Undo-Stapel gespeichert.
Das folgende Beispiel setzt den Text einer Aufgabe zurück, nachdem er programmatisch geändert wurde:
const undoExtension = gantt.ext.undo;
const task = gantt.getTask(1);
console.log(task.text);
// -> "task 1";
undoExtension.saveState(task.id, "task");
task.text = "modified"; gantt.updateTask(1);
console.log(task.text);
// -> "modified";
undoExtension.undo();
console.log(task.text);
// -> "task 1";
Hier speichert die saveState()-Methode den ursprünglichen Text "task 1", bevor er auf "modified" geändert wird. Durch den anschließenden Aufruf von gantt.ext.undo.undo() wird der Text auf den ursprünglichen Wert zurückgesetzt.
Weitere Informationen zu saveState() finden Sie im Artikel Undo-Erweiterung.
Mehrere Einstellungen ermöglichen die Anpassung der Undo-Operation.
Verwenden Sie den undo_actions-Parameter, um festzulegen, welche Aktionen durch Undo abgedeckt werden:
gantt.config.undo_actions = {
update:"update",
remove:"remove", // entfernt ein Element aus dem Datenspeicher
add:"add"
};
Um festzulegen, wie viele Undo-Schritte verfügbar sind, verwenden Sie den undo_steps-Parameter:
gantt.config.undo_steps = 10;
Standardmäßig können bis zu 10 Aktionen rückgängig gemacht werden.
Sie können auch definieren, für welche Entitäten Undo gilt, indem Sie den undo_types-Parameter verwenden:
gantt.config.undo_types = {
link:"link",
task:"task"
};
Es gibt mehrere Events, die sich auf die Undo/Redo-Funktionalität beziehen: