2013-03-12 27 views
0

我正在使用動態命令的parsley框架中開發一個應用程序。找出在Parsley動態命令中發送請求的消息類型

下面是示例代碼

public class MyCommand extends EventDispatcher 
{ 
    [Inject] 
    public var service:IService; 

    [Inject(id="model")] 
    public var model:TestModel; 

    public function execute(message:TestMessage):AsyncToken 
    {   
     return service.getResponse(message.requestObject); 
    } 

    public function result(data:Object):void 
    { 

      //Here i want to find out the response is for message type1 or message type2, that called the service. 
     var result:ByteArray=data as ByteArray; 

     var response:ArrayCollection=result.readObject() as ArrayCollection; 

     model.data=response; 

    } 

    //faultCode, faultDetail, faultString, rootCause 
    public function error(info:Object):void 
    {      
     dispatchEvent(new AlertEvent(AlertEvent.SHOW_ALERT,"Service Loading Error", 
      "There was an error in the application")); 
    }   
} 

郵件類

public class TestMessage 
{ 

    public static const Type1:int=0; 
    public static const Type2:int=1; 

    private var _type:int; 

    private var _requestObject:RequestObjectHelper; 

    [Selector] 
    public function get type():int 
    { 
     return _type; 
    } 

    public function set requestObject(value:RequestObjectHelper):void 
    { 
     _requestObject = value; 
    } 

    public function get requestObject():RequestObjectHelper 
    { 
     return _requestObject; 
    } 

    public function TestMessage(type:int) 
    { 
     _type=type; 
    } 
} 

RequestObject類

public class RequestObjectHelper 
    { 
      private var _url:String; 
      private var _resultFormat:String; 
      private var _noCacheParam:Object; 

//getters and setters 
    } 

消息調度代碼

public function handleViewInitialized():void 
{   
    var requestObject:RequestObjectHelper; 
    var message:TestMessage; 

    //msg1 
    requestObject=new RequestObjectHelper(); 

    requestObject.url="url1"; 

    requestObject.resultFormat="amf"; 

    message=new TestMessage(TestMessage.Type1); 

    message.requestObject=requestObject; 

    dispatcher(message); 

    //msg2  
    requestObject=new RequestObjectHelper(); 

    requestObject.url="url2"; 

    requestObject.resultFormat="amf"; 

    message=new TestMessage(TestMessage.Type2); 

    message.requestObject=requestObject; 

    dispatcher(message);    
} 

我希望上面的代碼很容易理解。我儘量保持簡單。 我想從這段代碼中得到什麼如何從服務響應到達時MyCommand類的result方法中調用服務的結果方法來識別哪種類型的消息。

+0

這看起來並不正確(作爲一個RobotLegs用戶)。如果Parsely與RL類似,Command的部分就是execute()方法。所有其他的東西不會從執行中調用(你沒有調用它),任何調用命令作爲命令的東西都不會/不應該知道它。 – 2013-03-12 14:39:39

+0

@AmyBlankenship:正如你所說的命令不應該知道什麼叫它,這是parsley命令的確切情況。我最終得到的是同一個模型的兩個單獨的命令。你能告訴我爲什麼命令不應該知道什麼叫它? – ankurtr 2013-03-13 03:29:51

+0

這不是我說的。我說調用execute()方法的東西不會知道其他方法的任何內容,因爲如果它正確連接,框架只知道界面中定義了什麼。但是你說得對,命令應該只知道注入的內容。我也不希望Parsley有任何使用或知道execute()返回的設施。這不是命令的工作方式/他們的用途。 – 2013-03-13 12:48:41

回答

1

你可以讓你的命令記住它被調用的類型。

private var msgType:String; 

public function execute(message:TestMessage):AsyncToken 
{ 
    msgType = message.type; 
    return service.getResponse(message.requestObject); 
} 

public function result(data:Object):void 
{ 
    //Here i want to find out the response is for message type1 or message type2, that called the service. 
    if(msgType==TestMessage.Type1) 
     trace("Type1"); 
    else if(msgType==TestMessage.Type2) 
     trace("Type2"); 
    else 
     trace(msgType); 
} 
+0

我最初想到了這一點,但我的觀點是什麼應該提供一種機制,通過這種機制,我們可以在結果方法中瞭解到此結果適用於此消息類型。我正在尋找那個東西,不管那個設施在那裏。 – ankurtr 2013-03-13 03:32:38

+0

@ ankur.trapasiya:'在結果方法中知道此結果是針對此消息類型的<< - 結果不是'針對消息類型',它是針對_command_的。你正在尋找的東西不存在,也沒有必要。 BTW DynamicCommand已在Parsley3中刪除,您應該使用MapCommand。 – dvdgsng 2013-03-13 04:25:11

+0

編輯:也許[CommandResult]是你正在尋找的東西,它可以用來檢索觸發命令的實際消息以及結果。像這樣:'[CommandResult] public function handleResult(user:User,message:LoginMessage):void {'...參見Parsley文檔7.6.2。 ...否則,請查看spicelib命令框架文檔。 – dvdgsng 2013-03-13 04:36:23

相關問題