Module: sdw/templates/dnd/toggleListEditormanager

Dieses Modul definiert die Klasse ToggleListEditormanager.

Ein einfacher generischer Editormanager, der Objekte zwischen 2 Listen mit drag and drop verschieben kann. Das ist nur eine Basisklasse, von der konkrete Editormanager abgeleitet werden müssen.

Grundsätzliche Betrachtung:

Es gibt 3 fachliche Klassen:

  1. klasseObjekt Die Klasse, an die eine neue Objekte im Rahmen einer 1:n-Beziehung drangehängt werden, oder von der solche abhängigen Objekte gelöscht werden. Die abgeleitete Klasse muss eine Instanz dieser Klasse in this.objektInstanz bereitstellen.
  2. klasseDomaene Die Klasse, die Objekte solcher Art beinhaltet, die an die klasseObjekt drangehängt werden können
  3. klasseRelation Diese Klasse stellt due Verknüpfung zwischen klasseOjekt und klasseRelation dar. Ihre Instanzen haben 2 Zeiger, einen auf eine Instanz von Objekt und eine auf eine Instanz von Domäne.

Die abgeleitete Klasse mus ein Command-Objekt definieren, das von der API eine Liste der Domäne- und Relationobjekte holt. Diese Liste beinhaltet 2 Klassen von Objekten:

  1. flache klasseDomaene-Objekte
  2. klasseRelation-Objekte mit 2 geschachtelten Listobjects der Klassen Domäne und Objekt

Die Basisklasse dieser Klasse führt den Command aus und steckt die Liste in einen Memorystore.Einen separaten dnd-Status gibt es nicht, der Klassenname dient als Status und Definition des initialen Zielcontainers.

Ein drag aus den Domänen- in den Relationcontainer holt ein Relation-Template von der API, liest die neue OID aus und macht aus dem alten klasseDomaene-Objekt ein neues klasseRelation-Objekt.

Ein drag in umgekehrter Richtung löscht das Relation-Objekt per API-Call und macht aus dem Relation-Objekt wieder ein einfaches Domäne-Objekt. Dazu wird die OID mit der OID überschrieben, die in dem geschachtelten klasseDomäne-Listobject ja noch verfügbar ist, dann werden die beiden Schachtelungen gelöscht.

Source:
See:

Extends

Requires

  • module:dojo/_base/declare
  • module:dojo/_base/lang
  • module:dojo/dom-construct
  • module:dojo/_base/array
  • module:dojo/dom-class
  • module:dojo/on
  • module:dojo/dom
  • module:sdw/command
  • module:sdw/util
  • module:sdw/const
  • module:dijit/TitlePane
  • module:dijit/Tooltip

Members

klasseDomaene

Properties:
Name Type Description
klasseDomaene String

Muss von den abgeleiteten Klassen überschrieben werden

Source:

klasseObjekt

Properties:
Name Type Description
klasseObjekt String

Muss von den abgeleiteten Klassen überschrieben werden

Source:

klasseRelation

Properties:
Name Type Description
klasseRelation String

Muss von den abgeleiteten Klassen überschrieben werden

Source:

moduleName

Properties:
Name Type Description
moduleName String

Name des Moduls aus lokaler Konstante

Source:

objektInstanz

Properties:
Name Type Description
objekt Object

Zeiger auf die konkrete Instanz der Objektklasse. Muss von den abgeleiteten Klassen gesetzt werden

Source:

opcRemoveRelation

Properties:
Name Type Description
opcRemoveRelation OPCODE

Muss von den abgeleiteten Klassen überschrieben werden

Source:

opcTemplateRelation

Properties:
Name Type Description
opcTemplateRelation OPCODE

Muss von den abgeleiteten Klassen überschrieben werden

Source:

(inner, constant) dndContainerDomaene :String

Type:
  • String
Default Value:
  • "dndContainerDomaene"
Source:

(inner, constant) dndContainerRelation :String

Type:
  • String
Default Value:
  • "dndContainerRelation"
Source:

Methods

afterDrop()

Überschreibt die Implementierung der Basisklasse. Propagiert die Änderungen asynchron an die API und updated den Store. Kritisch sind nur 2 Ereignisse:

  1. Wenn aus Domäne->Relation wird muss ein Template geholt werden und die bisherige Domäneninstanz eine Relation-Instanz werden. Dazu werden die Daten des Templates verwendet: Klasse ändern, OID üerschreiben, Listobjects this.klasseObjekt und this.klasseDomaene dranhängen.

  2. Vice versa: Wenn aus Relation->Domäne wird. Hier kommt kein Template sondern nur der Status deleted zurück. In dem Fall die Klasse auf Domäne setzen, die OID aus dem Listobject der Domäne item[this.klasseDomaene][oid ] holen und direkt beim item setzen und die dann überflüssigen Listobjects this.klasseDomaene und this.klasseObjekt aus dem item löschen. this.klasseDomaene kann auch drinbleiben, ist ja ein konstanter Zeiger auf sich selber und in manchen Situationen hilfreich für das Bauen des GUI, z.B. wenn ein Image von der API geladen werden soll. Bleibt also drin.

Source:

createItemDiv(storeItem) → {Object}

Erstellt die Visualisierung des storeItems, also des dnd-Objektes als DomNode vom Typ div. Kann von den abgeleiteten Klassen überschrieben werden.

Parameters:
Name Type Description
storeItem Object

Das storeItem, das dargestellt werden soll

Source:
Returns:

divDNDItem, domNode vom Typ div, der das GUI für das dndItem realisiert

Type
Object

creator(storeItem)

Überschreibt die Methode der Basisklasse. Erstellt die Visualisierung der dnd-Items. Achtung: Läuft im Scope der dnd-Source. Der Editormanager (also diese Klasse hier) muss mit this.delegate angesprochen werden.

Parameters:
Name Type Description
storeItem Object

Das Item, wird durch eine Query aus dem Store zur Verfügung gestellt

Properties
Name Type Description
id UUID

Die id des Items im Store, nicht im Dom!

klasse String

Die fachliche Klasse des Items im Store

label String

Der Anzeigename des Items wie er auf der Oberfläche und im Avatar erscheinen soll

oid OID

Die oid des Items im Store

Source:

onClickToolbarButton(domId) → {Boolean}

Überschreibt die Implementierung der Basisklasse und dispatcht die Buttonclicks

Parameters:
Name Type Description
domId String

Eine Konstante die angibt, welcher Button gedrückt worden ist

Source:
Returns:

Zeigt an, ob der Event hier verarbeitet werden konnte oder nicht.

Type
Boolean

setProperties()

Überschreibt die Implementierung der Basisklasse um Eigenschaften zu setzen. Muss von den abgeleiteten Klassen überschrieben werden, damit diese ihre Eigenschaften setzen können, und dann mit this.inherited(arguments) aufgerufen werden.

Folgende Eigenschaften müssen von den abgeleiteten Klassen überschrieben werden:

  1. this.klasseObjekt
  2. this.klasseDomaene
  3. this.klasseRelation
  4. this.opcTemplateRelation
  5. this.opcRemoveRelation

Darüber hinaus muss die abgeleitete Klasse folgende Objekte zur Verfügung stellen:

  1. this.objektInstanz
  2. this.storeCommand
Source: