2009-05-06 8 views
1

Ist es möglich, durch eine Art von Metadaten, möglicherweise eine Eigenschaft eines Objekts zu erzwingen? Wir haben eine Reihe von nicht-visuellen Komponenten, die einfach nichts tun, wenn eine oder mehr Eigenschaften festgelegt sind, wie zum Beispiel:Obligatorische Attribute in MXML?

<ToolTip target="{this}"> 
    <mx:Image source="foo.png" /> 
</ToolTip> 

In diesem Fall würde die Zieleigenschaft schön sein, wie erforderlich zu markieren, wie es macht keinen Sinn, es nie zu setzen. Dies ist kein großes Problem, da es leicht zu dokumentieren ist, aber es wäre schön, wenigstens ein paar Debug-Roundtrips zu eliminieren, indem der Compiler den Entwickler über seinen Fehler informiert.

Wir möchten nicht, dass dieses Tag in irgendeiner Weise redundant ist, was (in diesem Fall) gelöst werden könnte, indem einfach die ToolTip-Komponente zu einer UIComponent gemacht und die parent-Eigenschaft verwendet wird. Aber für eine Sache, fügt dieser unnötigen Aufwand und in anderen Fällen ist es einfach nicht richtig:

<Button id="btn" label="Foo" /> 
<ToolTip target="{btn}"> 
    <mx:Image source="foo.png" /> 
</ToolTip> 

So sind obligatorisch mxml eine Möglichkeit Attribute?

Antwort

1

Es gibt eine Lösung, aber es ist nicht so einfach wie die Verwendung von Metadaten. Lassen Sie einfach Ihre nicht-visuellen Komponenten die IMXMLObject-Schnittstelle implementieren. Die Schnittstelle hat nur eine Methode "initialisiert". Das Implementieren der Schnittstelle ermöglicht es Ihnen, das Objekt zu überprüfen, wie es über MXML initialisiert wird.

So ...

public function initialized(document:Object, id:String):void 
{ 
    if (target == null) throw new Error("You must supply an argument to target!"); 
} 

Es wäre schön, Zeit zu überprüfen, haben zu kompilieren, aber das funktioniert anständig.

+0

Vielen Dank für Ihre Antwort! Ich hatte keine Ahnung von dieser Schnittstelle, aber ich bin froh darüber zu hören. Wir haben mehrere Klassen, die davon profitieren können. Es ist schade, dass Kompilierzeit Überprüfung ist out, aber wir werden auf jeden Fall mit dieser Schnittstelle verwalten. Danke vielmals! –

+0

Folgefrage: Gibt es eine andere Schnittstelle, die implementiert werden kann, wenn die Eigenschaft, die der mxmlc-Compiler generiert, geändert wird? Angenommen, ich habe eine nicht visuelle Komponente, die IMXMObject implementiert, und das Tag, wenn es einem mxml-Dokument hinzugefügt wird, erhält die ID "foo". Dies erzeugt die Eigenschaft foo mit einem Verweis auf das Objekt, das aus der mxml-Beschreibung instanziiert wurde, richtig? Wenn ich nun diese Referenz auf eine neue Instanz ändere, kann meine Instanz irgendwie davon wissen? Außerdem nehme ich an, dass diese Schnittstelle nur für deklarierte Instanzen, nicht für Laufzeit-Instanzen, geeignet ist. –