0
我有我用我的Zend_AMF端點通信的AS3類:可能傾聽事件然後返回類的結果?
package test
{
import flash.events.Event;
import mx.rpc.AbstractOperation;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;
[Bindable]
[RemoteClass(alias="Request")]
public class Request
{
public var url:String = '';
//There are a lot more properties, but I have removed them for brevity
public function Request(url:String){
this.url = url;
}
public function send():void{
//Create the remoting object
var remotingObject:RemoteObject = new RemoteObject('test');
remotingObject.endpoint = "http://site.com/endpoint.php";
remotingObject.showBusyCursor = true;
//Send it
remotingObject.source = this.url;
var op:AbstractOperation = remotingObject.getOperation(null);
op.addEventListener(ResultEvent.RESULT, result);
op.send(this);
}
private function result(event:ResultEvent){
this.dispatchEvent(event);
}
}
}
要使用它,我做了以下內容:
var request:Request = new Request('someRemotingCommand');
request.addEventListener(ResultEvent.RESULT, catchEvent);
request.send();
public function catchEvent(event:ResultEvent):void{
var result:Response = event.result as Response; //Get result as my response object
trace(result.responseText);
}
所有這一切工作正常,但它需要大量的的工作使用它。在我的request
上致電send()
時,我始終期望有一個Response
對象。
理想情況下,我想能夠調用request.send()
並將它而不是直接返回不必處理收聽者Response
對象:
var result:Response = request.send();
這可能嗎?如果是這樣,我該如何去做這件事?
我喜歡工廠類的想法。你能用一個簡單的例子來更新你的答案嗎? – F21 2012-01-11 03:41:40
經過進一步調查,我感覺工廠可能無法將代碼簡化爲1行,因爲無法從事件監聽器函數返回。它是否正確? – F21 2012-01-11 04:39:32
好吧,你可以用一個你有類構造函數的方式創建它,並帶兩個變量('request'和'result'),然後這個類會更新結果,只要響應不是一個簡單的對象,比如字符串或數字(因爲你不能在as3中做指針) – Daniel 2012-01-11 16:25:16