Flex的RemoteObject的 - 处理多个请求(Flex RemoteObject - ha

2019-09-18 09:31发布

我有几个,我想在根据上下文不同的方式来响应远程对象的方法,但我宁愿没有设置很多不同的RemoteObject别名。 做任何建议吗? 一些背景资料:

比方说,我有一个显示以不同的方式销售统计数据的管理应用程序。 远程方法如下所示:

<mx:RemoteObject id="rpt" destination="AMFServer">
  <mx:method name="getSalesStats" fault="getSalesStatsFault(event)" 
    result = "getSalesStatsSuccess(event)" />
</mx:RemoteObject>

该getSalesStats方法接收雇员ID和一个销售类型作为参数。 你会这样称呼它:

rpt.getSalesStats(120, "peanuts");

public function getSalesStatsSuccess(e:ResultEvent):void {
   salesdata:ArrayCollection = e.result.rows as ArrayCollection; 
   salesGraph.dataProvider = salesdata; 
   salesGraphPanel.title = "Peanut Sales, 1990";
}

我希望能够调用在不同环境下这种方法,有时将结果发送到一个图表,有时一个DataGrid; 我希望能够更改标题,并根据用户想要什么样的图表类型。 有些什么,我想可以通过评估从服务器返回的数据来实现; 对象包含报表的名字,所以我可以评估值。 但有些事情需要基于不仅仅是我所得到的从服务器返回更多的改变。 如果这是一个同步调用,它会很容易; 我会做一些事情,如:

function buttonOneClick():void {
   myData1:ArrayCollection = getSalesStats(120, "peanuts");
   myChart.dataProvider = myData1;
}

function buttonTwoClick():void {
   myData2:ArrayCollection = getSalesStats(120, "cashews");
   myDataGrid.dataProvider = myData2; 
}

我想通过远程方法传递一些东西到响应的功能,如:

rpt.getSalesStats(120, "peanuts", "clicked button one");

但当然,抛出一个错误,因为服务器不想要的最后一个参数。 有什么想法吗? 我要澄清,如果这是令人困惑的..

Answer 1:

下面是使用的AsyncToken与RemoteObject的方法的一个很好的例子调用做正是你所需要的。

事情要记住,当你正在使用的AsyncToken是,它是一个动态的对象,你可以添加你想要的任何财产。 在您的应答方法,本次活动将进行到AsyncToken的引用,您可以访问您的动态性能可以轻松地识别响应的上下文。



Answer 2:

在Flex 4和3.4,使用的CallResponder类:

<mx:RemoteObject id="rpt" destination="AMFServer"/>
<s:CallResponder id="toChartResponder" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToChartSuccess(event)" />
<s:CallResponder id="toDataGridResponder"fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToDataGridSuccess(event)"/>

要拨打电话,从方法调用响应的令牌属性分配返回的AsyncToken:

toDataGridResponder.token = rpt.getSalesStats();

这种分离的方法调用的响应定义,然后你可以用它在任何你需要的逻辑。



Answer 3:

你可以有多种方法来一个RemoteObject。

<mx:RemoteObject id="rpt" destination="AMFServer">
    <mx:method name="getSalesStatsToChart" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToChartSuccess(event)" />
    <mx:method name="getSalesStatsToDataGrid" fault="getSalesStatsFault(event)" 
        result = "getSalesStatsToDataGridSuccess(event)" />
</mx:RemoteObject>

是否有任何理由,为什么你不能使用这样的事情?



Answer 4:

Flex支持用于处理多个请求对同一服务的异步完成标记的设计模式。 请参阅BlazeDS的文档 。



Answer 5:

我认为,只有两种方法可以做到这一点:

  • 具有用于每个呼叫上下文独立的远程对象。 对性能的影响是不容忽视的IMO。
  • 设置为并发该RemoteObject单(或第一,不知道名字,但不是多个或最后一个),并有某种标志,你可以用它来判断哪些是所谓的最后一个方法。 这将,当然,限制服务器在此远程对象的时候调用一个。 如果前面的调用没有返回结果尚未调用将立即失败。

这是我看到的唯一途径,如果你有对服务器的访问权限。 如果我是你的情况,我会甚至创建远程对象每次我做远程调用的时间。 我不认为这会影响性能(请纠正我,如果我错了)。 祝好运!



Answer 6:

VAR rpcCall:的AsyncToken;

    rpcCall = remoteService.getSessionId();
    rpcCall.addResponder(new Responder(handler_getSessionIdSuccess, handler_getSessionIdFault) );

    rpcCall = remoteService.getMyData();
    rpcCall.addResponder(new Responder(handler_getMyDataSuccess, handlerfault));

的RemoteObject的希望它才有意义“remoteService”实例。



文章来源: Flex RemoteObject - handling multiple requests