2009-05-16 4 views
1

So ist es. Ich bekomme XML-Daten, ich muss warten, bis es geparst wird und dann das Ereignis absetzen, sobald die Analyse aus meiner Bibliothek erfolgt ist.Was sind VOs in flex oder amfphp?

Erstens gibt es eine Möglichkeit, Ereignisse in der Bibliothek in diesem Fall zu vermeiden?

Eine Alternative, die ich sah, war die Verwendung von VOs. Also, was ist das und wie kann ich es machen?

Antwort

0

Wenn Sie Ihr Ergebnis als XML-Daten von flex erhalten, schätze ich, dass Sie verwenden und HTTPService, die die XML erhält, so dass Sie auf die Daten in der Ergebniseigenschaft eines ResultEvent zugreifen.

z.B.

private function resultHandler(e:ResultEvent):void{} 

Sie würden Ihre Daten erhalten:

private function resultHandler(e:ResultEvent):void{ 
    var tempCollection:ArrayCollection = new ArrayCollection(); 
    tempCollection = e.result.someDataObject as ArrayCollection; 
} 

und dies der richtige Ort würden Sie die Daten, die Sie aus XML erhalten setzen würde in VO des

private function resultHandler(e:ResultEvent):void{ 
    var tempCollection:ArrayCollection = new ArrayCollection(); 
    tempCollection = e.result.someDataNode as ArrayCollection; 
for each(var item:Object in tempCollection){ 
    var myVO:VO = new Image(); 
    myVO.firstProperty = item.firstProperty; 
    myVO.secondProperty = item.secondProperty; 
    myVOCollection.addItem(myVO); 
} 
} 

Die Idee ist einfach ... Ein VO ist nur ein benutzerdefiniertes Objekt: Eine Klasse, die Sie erstellen, erweitert das Objekt und dient dazu, Werte aus einer externen Datenquelle zu speichern (z. B. Ihr XML-Ergebnis). Da Sie eine benutzerdefinierte Klasse verwenden, die schneller als eine dynamische Klasse ist, und es hilft viel beim Lesen des Codes und Debuggen (Sie erhalten die Überprüfung von Datentypen und all das). Produkte in einem Geschäft, Fotos in einer Galerie usw.

Im Beispiel I someDataNode angenommen ist ein Knoten in XML und myVOCollection, ein Arraycollection für Ihre Daten und so weiter:

Sie können alles sein.

so ein VO in diesem Fall Sie so etwas wie:

package{ 
class VO{ 

private var _firstProperty:String; 
private var _secondProperty:String; 

public function VO(firstProp:String=null,secondProp:String=null){ 
_firstProperty = firstProp; 
_secondProperty = secondProperty; 
} 

public function get firstProperty():String{ 
return _firstProperty; 
} 

public function set firstProperty(value:String):void{ 
_firstProperty = value; 
} 

public function get secondProperty():String{ 
return _secondProperty; 
} 

public function set secondProperty(value:String):void{ 
_secondProperty = value; 
} 

} 
} 

Ihre Modellklasse würde wahrscheinlich Laden und Parsen von Daten verwalten, und sobald dies geschehen ist wird es eine -Ereignis auf die Anwendung zu informieren, die angeforderte Daten sind verfügbar.

In so wenigen Worten wie möglich wäre ein valueobject in flex eine actionscipt-Klasse, die ein Datenelement darstellt. Die Verwendung von Eins bedeutet, dass ein generisches Objekt (das von einer externen Quelle kommt) auf seine Actionscript-Darstellung abgebildet wird.

Nichts Besonderes.

Ich hoffe, es hilft.

+0

VOs sind in keiner Weise zu einer externen Datenquelle gebunden. Sie sind auch sehr nützlich für lokal erzeugte Daten. –

1

Wenn Sie AMFPHP verwenden können, würde ich es sehr empfehlen. Sie können Value Objects (VO) sowohl auf dem Server als auch in ActionScript definieren. Dies ermöglicht Ihnen, stark typisierte Objekte von Client zu Server hin und her zu übergeben. Es besteht keine Notwendigkeit zu analysieren, e4x zu verwenden oder auf diese Weise zu leiden.

VOs werden auch als DTO (Data Transfer Objects) bezeichnet, wobei es sich um objektorientierte Entwurfsmuster handelt.

0

Ein VO in Verbindung mit einem externen Objekt ermöglicht den Datentransfer von einem Objekt (in einer Sprache) zum entsprechenden Objekt (in einer anderen Sprache).

Anstatt XML, e4x usw. parsen zu müssen, würde Ihr Flex direkt über einen Gateway mit Ihrem PHP kommunizieren (d. H. ZendAMF, amfPHP, sabreAMF usw.).

Es gibt einige weitere Informationen auf dieser Site, die erklären, wie dies zu tun ist (Einrichten eines RemoteObject). Natürlich, was George oben gesagt hat, ist gut, Sie müssen die Klasse registrieren, wenn Sie Remote-Objekte planen.

http://www.brentknigge.com/?q=node/496

Prost