Wichtig
Detail
Wichtig
Detail
Wichtig
#26959
Drag&Drop: Verallgemeinerung der DropByExpression-API
Konfiguriert man in der Anwendung eine baum- oder tabellenartige Komponente, dann hat man die Möglichkeit Ausdrücke für die Drag&Drop Funktionalität zu konfigurieren.
Die konfigurierten TLScript-Ausdrücke geben an, ob eine gezogenes Objekt an einer bestimmten Stelle der Komponente fallen gelassen werden kann und was anschließend passieren soll.
Zurzeit ist die Signatur der konfigurierten Ausdrücke auf ein einzelnes gezogenes Element beschränkt. Es ist jedoch möglich, in der Anwendung mehrere Objekte gleichzeitig zu ziehen und fallen zu lassen. Ist dies der Fall, dann wird der konfigurierte Ausdruck jeweils auf jedes einzelne gezogene Objekte angewandt.
Verbesserung
Die Signatur der Ausdrücek soll auf eine Menge von gezogenen Elementen verallgemeinert werden. Das hat den Vorteil dass der Ausdruck nur ein einziges Mal pro Drag&Drop-Operation ausgewertet wird. Außerdem lassen sich damit komplexere Regeln formulieren, die eine Entscheidung für die Gesamtmenge der gezogenen Objekte treffen können, statt die Operation nur wie ein Short-Cut für viele einzelne Operationen zu betrachten (von denen manche durchgeführt werden können und andere vielleicht nicht).
Code-Migration
Da sich die Signatur der konfigurierten Ausdrücke für tl:TableDropTargetByExpression und tl:TreeDropTargetByExpression geändert hat, müssen die Ausdrücke für canDrop und handleDrop angepasst werden.
Eine semantikerhaltende Umschreibung speichert die bestehende TLScript-Funktion zwischen und wendet sie auf alle Objekte an:
canDrop:
object -> reference -> foobar()
wird zu
canDrop:
draggedObjects -> reference -> { handler = object -> reference -> foobar(); $draggedObjects.filter(object-> !$handler($object,$reference)).isEmpty(); }
bzw.
handleDrop:
object -> reference -> foobar()
wird zu
handleDrop:
draggedObjects -> reference -> { handler = object -> reference -> foobar(); $draggedObjects.foreach(object-> $handler($object,$reference)); }
Test
Kein Test. Refactoring.