Previous topic

4.8. Ausgewählte Methoden der Widget-Klasse

Next topic

5. Maongo-Toolkit

This Page

4.9. Das Type-Value-Prinzip

An vielen Stellen, wo im MAD-XML-Code Werte gesetzt werden müssen, geschieht dies nach dem Type-Value-Prinzip. Der häufigste Anwendungsfall für Type-Value-Angaben ist das Setzen von Widget-Properties. Da eine Widget-Property von einem festgelegten Typ ist, kann die type Angabe weggelassen werden. Ausnahmen sind in den Beschreibungen der Widget-Properties dokumentiert.

Elemente, die nach dem Type-Value-Prinzip funktionieren, sind:

  • property
  • define
  • object
  • set

Das Zuweisen von Werten kann auf dreierlei Art passieren:

  • mit einem type- und einem value-Attribut
  • mit einem lookup-Attribut
  • mit einem Child-Element, das einen Wert repräsentiert

Zuweisung von Werten mit einem type- und einem value-Attribut

<property name="Shape" type="Rectangle" value="200,300" />
<define name="MySmallRect" type="Rectangle" value="200,300" />
<object type="Rectangle" value="200,300" />
<set property="Shape" type="Rectangle" value="200,300" />

Zuweisung von Werten mit einem lookup-Attribut

<property name="Shape" type="Rectangle" lookup="Path.To.Other.Shape" />

Der zu setzende Wert wird an anderer Stelle in der Presentation ‘nachgeschlagen’. Die Syntax für Lookups ist im Abschnitt Defines, Lookups, Bindings beschrieben.

Die folgende alternative Schreibweise nutzt das value-Attribut für ein Lookup und ist gleichbedeutend:

<property name="Shape" type="Rectangle" value="@Path.To.Other.Shape" />

Zuweisung von Werten als XML-Childnode

<property name="Shape">R 200,300</property>

oder:

<property name="Shape">
  <object type="Shape" value="R 200,300"/>
</property>

Im ersten Fall wird die Wertangabe der Property genauso behandelt wie im value-Attribut. Es darf kein zusätzliches value-Attribut auf dem Property-Element geben.

Im zweiten Fall wird als Wert einer Property ein Objekt vom Typ Shape zugewiesen. Neben <object> sind hier auch die komplexen Datentypen <map>, <list>, <textformat> und <data> erlaubt. type- und value-Attribute auf dem umschließenden Element sind nicht erlaubt.

Weiteres Beispiel:

<define name="Dummymap">
  <map>
    <define name="a" type="String" value="Foo"/>
    <define name="b" type="String" value="Bar"/>
  </map>
</define>

Die möglichen Typen und die Formate für die Wertangabe sind im Kapitel Datentypen beschrieben.

Zuweisen von dynamischen Ausdrücken

Bei Elementen, die nach dem Type-Value-Prinzip funktionieren, ist auch die Zuweisung von Werten mit einer JavaScript-Funktion im value-Attribut oder im XML-Tag möglich. In geschweifte Klammern {} wird der Body einer JavaScript-Funktion geschrieben.

Lookups sind innerhalb einer so geschriebenen JavaScript-Funktion nicht möglich, wohl aber der Zugriff auf die Eigenschaften des umschließenden Widgets:

Beispiele:

<define name="Test" value="{return 4*4}" />
<define name="Test" value="{return Math.PI * this.Width}" />

alternative Schreibweise:
<define name="Test">{return 4*4}</define>
<define name="Test">{return Math.PI * this.Width}</define>