2009-05-29 5 views
2

Ich benutze web2py (v1.63) und Flex 3. web2py v1.61 eingeführt die @ Service Dekoratoren, mit denen Sie eine Controller-Funktion mit @ service.amfrpc taggen können . Sie können diese Funktion dann remote mit http://..../app/default/call/amfrpc/[function] aufrufen. Siehe http://www.web2py.com/examples/default/tools#services. Hat jemand ein Beispiel dafür, wie Sie eine Flex 3 einrichten würden, um eine Funktion wie diese aufzurufen? Hier ist, was ich bisher versucht habe:Verwenden von mx: RemoteObject mit web2py @ service.amfrpc dekorator

<mx:RemoteObject id="myRemote" destination="amfrpc" source="amfrpc" 
    endpoint="http://{mysite}/{myapp}/default/call/amfrpc/"> 
    <mx:method name="getContacts" 
     result="show_results(event)" 
     fault="on_fault(event)" /> 
</mx:RemoteObject> 

In meinem Szenario, was sollte der Wert der Ziel-und Quellattribute sein? Ich habe ein paar Artikel über Nicht-Web2py-Implementierungen gelesen, z. B. http://corlan.org/2008/10/10/flex-and-php-remoting-with-amfphp/, aber sie verwenden eine .../gateway.php-Datei, anstatt einen URI zu haben, der direkt der Funktion zugeordnet ist.

Alternativ konnte ich flash.net.NetConnection verwenden, um erfolgreich meine Remote-Funktion aufzurufen, aber die meiste Dokumentation, die ich gefunden habe, betrachtet dies als die alte, Pre-Flex 3-Möglichkeit von AMF. Siehe http://pyamf.org/wiki/HelloWorld/Flex. Hier ist der NetConnection Code:

gateway = new NetConnection(); 
gateway.connect("http://{mysite}/{myapp}/default/call/amfrpc/"); 
resp = new Responder(show_results, on_fault); 
gateway.call("getContacts", resp); 

-ROB

Antwort

1

Ich habe nicht einen Weg gefunden, eine RemoteObject- mit dem @ service.amfrpc Dekorateur zu verwenden. Allerdings kann ich den älteren ActionScript-Code mit einer NetConnection (ähnlich wie ursprünglich gepostet) verwenden und diese mit einer @ service.amfrpc-Funktion auf der web2py-Seite verknüpfen. Dies scheint gut zu funktionieren. Die einzige Sache, die Sie in dem NetConnection-Code ändern möchten, den ich ursprünglich geteilt habe, ist das Hinzufügen eines Ereignis-Listeners für den Verbindungsstatus. Sie können weitere Listener hinzufügen, wenn Sie das Bedürfnis haben, aber ich habe festgestellt, dass NetStatusEvent ein Muss war. Dieser Status wird ausgelöst, wenn der Server nicht antwortet. Sie Verbindung einrichten würde wie folgt aussehen:

gateway = new NetConnection(); 
gateway.addEventListener(NetStatusEvent.NET_STATUS, gateway_status); 
gateway.connect("http://127.0.0.1:8000/robs_amf/default/call/amfrpc/"); 
resp = new Responder(show_results, on_fault); 
gateway.call("getContacts", resp); 

-ROB