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:
Das Zuweisen von Werten kann auf dreierlei Art passieren:
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>