2.3 :apply()

Die Methode :apply() gibt es in zwei verschiedenen Ausprägungen:

2.3.1 :apply() (Datenmodell)

Beim Aufruf dieser Methode an einer View-Komponente werden alle Datenwerte von View-Attributen, die mit Model-Komponenten gekoppelt sind, ausgelesen (durch einen :retrieve()-Aufruf) und den korrespondierenden Model-Komponenten zugewiesen.

Durch Angabe der optionalen Parameter kann auch die Einschränkung auf ein spezielles View-Attribut bzw. auf einen speziellen indizierten Einzelwert erfolgen. Ohne Parameter erfolgt auch ein :apply()-Aufruf an allen Kindern und Kindeskindern.

Normalerweise sollte ein Aufruf dieser Methode nicht notwendig werden, da die Synchronisation zwischen View und Model über das Attribut .dataoptions[] gesteuert wird.

Die Kopplung zur Model-Komponente muss über die Attribute .datamodel und .dataset erfolgt sein.

Es erfolgt keine Fehlermeldung, wenn das Objekt keine gekoppelten Attribute besitzt oder das optional angegebene Attribut nicht existiert oder nicht gekoppelt ist.

Definition

void :apply
(
  { attribute Attribute input { , anyvalue  Index input } } |
  { anyvalue  Index     input }
)

Parameter

attribute Attribute input
Dieser optionale Parameter bezeichnet das View-Attribut welches ausgelesen und der zugehörigen Model-Komponente zugewiesen werden soll.
anyvalue Index input
Dieser optionale Parameter bezeichnet den Indexwert der für die Werteholung vom View-Objekt zu verwenden ist.

Beispiel

Im folgenden Beispieldialog erfolgt die Zuweisung des Inhaltsstrings ans Datenmodell über die Nutzung der :apply()-Methode am Edittext oder am Fenster. Der Statictext am unteren Fensterrand zeigt den aktuellen Wert des Datenmodells VarString an.

dialog D
accelerator AcF5 "F5";
variable string VarString := "Freitag";

window Wi
{
  .title ":apply demo";
  .width 200;

  child edittext Et
  {
    .xauto 0;
    .xright 80;
    .datamodel VarString;
    .dataset .value;
    .content "Samstag";
    .toolhelp "Press F5 to apply";
    
    on key AcF5
    {
      this:apply(.content);
    }
  }

  child pushbutton Pb
  {
    .xauto -1;
    .width 80;
    .text "Apply";

    on select
    {
      this.window:apply();
    }
  }

  child statictext St
  {
    .xauto 0;
    .yauto -1;
    .datamodel VarString;
    .dataget .value;
  }

  on close { exit(); }
}

2.3.2 :apply() (transformer)

Mit dieser Methode wird an einem transformer-Objekt die Transformation von Daten angestoßen. Für Näheres siehe Kapitel „Das transformer-Objekt“ des Handbuchs „XML-Schnittstelle“.

Diese Methode kann überdefiniert werden (ähnlich zu :init()).

Definition

boolean :apply
(
      anyvalue Src  input
  { , anyvalue Dest input output }
)

Parameter

anyvalue Src input

Hier wird der Wurzelknoten übergeben, von dem aus die Transformation gestartet werden soll. Dabei ist in der Default-Implementierung zwischen zwei Fällen zu unterscheiden.

  • Ist Src ein Document-Objekt, so wird als Startknoten die Wurzel des XML-Baumes gewählt, die das document repräsentiert. Das document muss geladen sein.

    Ist Src ein doccursor-Objekt, so wird als Wurzel der Knoten im XML-Baum genommen, auf das das doccursor-Objekt verweist.

    Die Transformationsrichtung ist XML nach IDM.

  • Ist Src ein IDM-Objekt (außer Document oder Doccursor), so wird als Wurzel das IDM-Objekt selbst gewählt.

    Die Transformationsrichtung ist nach IDM beliebig.

anyvalue Dest input output
In diesem optionalen Parameter kann der IDM-Programmierer einen beliebigen Wert übergeben, der lediglich weiter an die :action()-Methoden von mapping-Objekten durchgeschleust wird. D.h. innerhalb der Methode wird der Aufruf :action(Next_Node, Dest) iterativ für jeden besuchten Knoten ausgeführt.

Rückgabewert

Es wird true zurückgeliefert, falls die Transformation erfolgreich war, sonst ist der Wert false.

Objekte mit dieser Methode

transformer