You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/10/10 19:34:20 UTC

[royale-asjs] 08/16: override result handler to tickle binding subsystem.

This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 16635267f9f364dda8f4a86f1fb30261389ded59
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Oct 9 11:18:23 2018 -0700

    override result handler to tickle binding subsystem.
---
 .../src/main/royale/mx/rpc/AbstractInvoker.as      |  2 +-
 .../src/main/royale/mx/rpc/remoting/Operation.as   | 25 ++++++++++++++++----
 .../royale/mx/rpc/remoting/mxml/RemoteObject.as    | 27 ++++++++++++++++++----
 3 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/AbstractInvoker.as b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/AbstractInvoker.as
index 1729580..8499c45 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/AbstractInvoker.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/AbstractInvoker.as
@@ -349,7 +349,7 @@ public class AbstractInvoker extends EventDispatcher
      *
      *  @private
      */
-    mx_internal function resultHandler(event:MessageEvent):void
+    protected function resultHandler(event:MessageEvent):void
     {
         var token:AsyncToken = preHandle(event);
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/Operation.as b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/Operation.as
index b3449b1..f9d6b5c 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/Operation.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/Operation.as
@@ -19,9 +19,7 @@
 
 package mx.rpc.remoting
 {
-
 import mx.core.mx_internal;
-//import mx.managers.CursorManager;
 import mx.messaging.events.MessageEvent;
 import mx.messaging.messages.AsyncMessage;
 import mx.messaging.messages.IMessage;
@@ -35,8 +33,12 @@ import mx.rpc.AsyncToken;
 import mx.rpc.Fault;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.mxml.Concurrency;
+import mx.rpc.remoting.mxml.RemoteObject;
 import mx.utils.ObjectUtil;
 
+import org.apache.royale.events.IEventDispatcher;
+import org.apache.royale.events.ValueChangeEvent;
+
 use namespace mx_internal;
 
 /**
@@ -131,7 +133,7 @@ public class Operation extends AbstractOperation
             return _makeObjectsBindable;
         }
 
-        return RemoteObject(service).makeObjectsBindable;    
+        return (service as mx.rpc.remoting.RemoteObject).makeObjectsBindable;    
     }
 
     override public function set makeObjectsBindable(b:Boolean):void
@@ -257,7 +259,7 @@ public class Operation extends AbstractOperation
         var message:RemotingMessage = new RemotingMessage();
         message.operation = name;
         message.body = args;
-        message.source = RemoteObject(service).source;
+        message.source = (service as mx.rpc.remoting.RemoteObject).source;
 
         return invoke(message);
     }
@@ -327,6 +329,21 @@ public class Operation extends AbstractOperation
         return false;
     }
 
+    override protected function resultHandler(event:MessageEvent):void
+    {
+        super.resultHandler(event);
+        // fake an event that the service changed to force bindings to evaluate.
+        // The binding subsystem has trouble tracking the dynamically added
+        // operations.
+        if (remoteObject is mx.rpc.remoting.mxml.RemoteObject)
+        {
+            var document:Object = (remoteObject as mx.rpc.remoting.mxml.RemoteObject).getDocument();
+            (document as IEventDispatcher).dispatchEvent(ValueChangeEvent.createUpdateEvent(document, 
+                (remoteObject as mx.rpc.remoting.mxml.RemoteObject).getID(),
+                remoteObject, remoteObject));
+        }
+    }
+    
     //--------------------------------------------------------------------------
     //
     // Variables
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/mxml/RemoteObject.as b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/mxml/RemoteObject.as
index 92833ef..2cd1309 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/mxml/RemoteObject.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/rpc/remoting/mxml/RemoteObject.as
@@ -21,6 +21,8 @@ package mx.rpc.remoting.mxml
 {
 
 import org.apache.royale.events.Event;
+import org.apache.royale.core.IDocument;
+
 COMPILE::SWF
 {
     import flash.events.ErrorEvent;        
@@ -98,7 +100,7 @@ use namespace mx_internal;
  *  @productversion Flex 3
  *
  */
-public dynamic class RemoteObject extends mx.rpc.remoting.RemoteObject implements IMXMLSupport, IMXMLObject
+public dynamic class RemoteObject extends mx.rpc.remoting.RemoteObject implements IMXMLSupport, IMXMLObject, IDocument
 {
     //--------------------------------------------------------------------------
     //
@@ -240,18 +242,35 @@ public dynamic class RemoteObject extends mx.rpc.remoting.RemoteObject implement
 
         initialize();
     }
+    
+    public function setDocument(document:Object, id:String = null):void
+    {
+        this.document = document;
+        this.id = id;
+        
+        initialize();
+    }
 
 
-
+    public function getDocument():Object
+    {
+        return document;
+    }
+    
+    public function getID():String
+    {
+        return id;
+    }
+    
     //--------------------------------------------------------------------------
     //
     // Variables
     // 
     //--------------------------------------------------------------------------
 
-    mx_internal var document:Object;
+    private var document:Object;
     
-    mx_internal var id:String;
+    private var id:String;
     
 }