一个RemoteObject,调用同一个方法,就是参数不一样,填充两个ComboBox,如何实现

时间:2022-07-18 07:52:26
   我现在界面上又两个ComboBox,数据从一个表里面取出的。
   

     <mx:ComboBox id="week" dataProvider="{weeks}" labelField="name" />
     <mx:ComboBox id="day" dataProvider="{days}" labelField="name" />


查询星期数据:

   private function init():void{
     krSysQueryDefendService.query(" QTYPE = 'week'", "0");
     krSysQueryDefendService.query.addEventListener(ResultEvent.RESULT, getWeekHandler);

   }

   [Bindable]
   private var weeks: ArrayCollection = new ArrayCollection();
   private function getWeekHandler(event: ResultEvent): void{
      weeks = ArrayCollection(event.result);
   }



查询天数数据:

   
   krSysQueryDefendService.query(" QTYPE = 'day'", "0");

   [Bindable]
   private var days: ArrayCollection = new ArrayCollection();
private function getDayHandler(event: ResultEvent): void{
days = ArrayCollection(event.result);
   }



我如何实现这种情况,,我前面把krSysQueryDefendService.query(" QTYPE = 'day'", "0");
放在getWeekHandler方法里面,但是不能实现,,如果定义两个RemoteObject,,那是可以实现的,但是那样感觉不是很合理。。

8 个解决方案

#1


该回复于2010-04-15 09:01:12被版主删除

#2


最优的解决办法是,只发一次请求,把参数都传过去,那边也都检索出相应的数据,一次性的返回回来,并分别给两个ComboBox。

如果要用发两次请求的话,你先看一下RemoteObject的concurrency说明
指示如何处理对同一服务的多个调用的值。默认值为 multiple。允许使用的值包括: 
multiple 不取消现有请求,开发人员通过谨慎管理事件流来负责确保返回数据的一致性。此为默认。
single 一次仅允许执行一个请求;多个请求会生成错误。
last 发出请求会取消所有现有请求。

如果发2次请求不要修改concurrency属性,建议把query方法分成2个方法,这样他们可以分别监听自己的回调函数。

如果都用同一个query方法,又是同一个回调函数,那要在回调函数里面区分开来,可以在Server端增加个flag。从代码角度看,最不推荐这么做。

#3


昨天晚上我就直接一次性的把数据提取出来,然后再分别填充到ComboBox了,试了几种方法都不行,把concurrency设置成single也是不行的。。。可能你说的在Server端增加个flag,,这个不知道如何实现。。

#4


该回复于2010-04-15 13:41:50被版主删除

#5


比如Server端正常是返回一个List,你现在返回一个Map里面存放在List和flag
如果是检索weeks的话,
Map<String, List> result = new HashMap<String, List>();
result.put("list",weeksList); // weeksList是你检索week的数据list
result.put("owner","weeks");// 做个标记
如果是检索days的话,
Map<String, List> result = new HashMap<String, List>();
result.put("list",daysList); // daysList是你检索days的数据list
result.put("owner","days");// 做个标记

在as里面
var result:Object = event.result;
if (result.owner == "weeks") {
    weeks = ArrayCollection(result.list);
} else {
    days = ArrayCollection(result.list);
}

具体代码细节,可能还需要处理一下。

#6


。。。定义一个变量 存储当前返回数据的 类型。。。
根据不同类型 插入不同 combobox

#7


呵呵,,huangxin5257,老大,这个麻烦多了,,我现在一次性的把数据取出来了,分别填充到ComboBox的变量中,我想这样是最简单的。

#8


引用 7 楼 tcmis 的回复:
呵呵,,huangxin5257,老大,这个麻烦多了,,我现在一次性的把数据取出来了,分别填充到ComboBox的变量中,我想这样是最简单的。

正常这种也应该一次性的全读取过来。减少Sever端的并发次数

#1


该回复于2010-04-15 09:01:12被版主删除

#2


最优的解决办法是,只发一次请求,把参数都传过去,那边也都检索出相应的数据,一次性的返回回来,并分别给两个ComboBox。

如果要用发两次请求的话,你先看一下RemoteObject的concurrency说明
指示如何处理对同一服务的多个调用的值。默认值为 multiple。允许使用的值包括: 
multiple 不取消现有请求,开发人员通过谨慎管理事件流来负责确保返回数据的一致性。此为默认。
single 一次仅允许执行一个请求;多个请求会生成错误。
last 发出请求会取消所有现有请求。

如果发2次请求不要修改concurrency属性,建议把query方法分成2个方法,这样他们可以分别监听自己的回调函数。

如果都用同一个query方法,又是同一个回调函数,那要在回调函数里面区分开来,可以在Server端增加个flag。从代码角度看,最不推荐这么做。

#3


昨天晚上我就直接一次性的把数据提取出来,然后再分别填充到ComboBox了,试了几种方法都不行,把concurrency设置成single也是不行的。。。可能你说的在Server端增加个flag,,这个不知道如何实现。。

#4


该回复于2010-04-15 13:41:50被版主删除

#5


比如Server端正常是返回一个List,你现在返回一个Map里面存放在List和flag
如果是检索weeks的话,
Map<String, List> result = new HashMap<String, List>();
result.put("list",weeksList); // weeksList是你检索week的数据list
result.put("owner","weeks");// 做个标记
如果是检索days的话,
Map<String, List> result = new HashMap<String, List>();
result.put("list",daysList); // daysList是你检索days的数据list
result.put("owner","days");// 做个标记

在as里面
var result:Object = event.result;
if (result.owner == "weeks") {
    weeks = ArrayCollection(result.list);
} else {
    days = ArrayCollection(result.list);
}

具体代码细节,可能还需要处理一下。

#6


。。。定义一个变量 存储当前返回数据的 类型。。。
根据不同类型 插入不同 combobox

#7


呵呵,,huangxin5257,老大,这个麻烦多了,,我现在一次性的把数据取出来了,分别填充到ComboBox的变量中,我想这样是最简单的。

#8


引用 7 楼 tcmis 的回复:
呵呵,,huangxin5257,老大,这个麻烦多了,,我现在一次性的把数据取出来了,分别填充到ComboBox的变量中,我想这样是最简单的。

正常这种也应该一次性的全读取过来。减少Sever端的并发次数