在Flash中调用WS时的身份验证_5:dataProvider的问题
2006-08-20 01:37
302 查看
在昨天完成的例子中,我发现了一个问题,dataProvider不知道为什么,会增加一些内容数据类型未知的object,比如我自定义了一个数组给datagrid作为数据源,如下:
var tt:Array=new Array();
tt=[{name:"JimLee",sex:"F"},{name:"lwanchen",sex:"X"}];
dbGrid.dataProvider=tt;
将数组绑定到了dbGrid之后,按照我的想法,这时候如果
trace(dbGrid.dataProvider.length);
应该返回2,因为赋值给dbGrid.dataProvider的数组tt只有两个元素,但事实是上,flash返回的值可能是8,可能是9,就不是2,如果写个循环如下跟踪dbGrid.dataProvider中的元素:
for (var i:int=0;i<dbGrid.dataProvider.length;i++){
trace(dbGrid.dataProvider[i].name);
trace(dbGrid.dataProvider[i].sex);
}
你会发现,除了应该返回的前面定义的[{name:"JimLee",sex:"F"},{name:"lwanchen",sex:"X"}]之外,还会返回几个undefinded的数值!!
问题出在哪儿呢?
在翻看帮助文档,dataProvider的源文件等等之后,终于找到了问题的症结所在:如果提供的数组元素个数小于dataGrid组件的高度/rowHeight(dataGrid属性,行高),flash将自动将剩下的行数用undefinded类型的object补齐。
知道了原因就好办了,下面修改一下前面的代码(只需要在as中修改就可以了):
1、 新增变量resultRowNum
var resultRowNum:Number=0;
2、 在方法GetArray_3中给resultRowNum赋值:
function GetArray_3(myDB){
resultRowNum=myDB.length;
gb_main.dataProvider=myDB;
trace(gb_main.dataProvider.length);
}
3、 对DataGrid组件gb_main的change事件进行处理,如果DataGrid是新增行,让变量resultRowNum等于DataGrid组件gb_mai中有数据的最大值。
ls_mdc = new Object();
ls_mdc.change = function(evt){
var tgb:Object=evt.target;
if (tgb.selectedIndex>(resultRowNum-1)){
resultRowNum=tgb.selectedIndex;
}
}
gb_main.addEventListener("change",ls_mdc);
4、 修改按钮dbBind3_bt的处理函数,提交DataGrid组件gb_mai到WS:
this.dbBind3_bt.onPress=function(){
//trace(gb_main.dataProvider[1]);
trace(gb_main.dataProvider.length);
var i:Number=0;
var tCar:Array=new Array();
trace(resultRowNum);
for (i=0;i<resultRowNum;i++){
tCar.push(gb_main.dataProvider[i]);
trace(tCar[i].model);
}
//tCar=gb_main.dataProvider;
/*for (i=0;i<(tCar.length/2-1);i++){
trace(tCar[i].model);
}
*/
var op_8:PendingCall=myws.GetArray_4(tCar);
op_8.onResult=GetArray_4;
}
这样,就可以了。可惜,如果MM公司提供一个类似trim的函数,将dataProvider中数据类型为undefinded的元素裁剪掉,那不就方便多了,免得我们做这么多无用功。
var tt:Array=new Array();
tt=[{name:"JimLee",sex:"F"},{name:"lwanchen",sex:"X"}];
dbGrid.dataProvider=tt;
将数组绑定到了dbGrid之后,按照我的想法,这时候如果
trace(dbGrid.dataProvider.length);
应该返回2,因为赋值给dbGrid.dataProvider的数组tt只有两个元素,但事实是上,flash返回的值可能是8,可能是9,就不是2,如果写个循环如下跟踪dbGrid.dataProvider中的元素:
for (var i:int=0;i<dbGrid.dataProvider.length;i++){
trace(dbGrid.dataProvider[i].name);
trace(dbGrid.dataProvider[i].sex);
}
你会发现,除了应该返回的前面定义的[{name:"JimLee",sex:"F"},{name:"lwanchen",sex:"X"}]之外,还会返回几个undefinded的数值!!
问题出在哪儿呢?
在翻看帮助文档,dataProvider的源文件等等之后,终于找到了问题的症结所在:如果提供的数组元素个数小于dataGrid组件的高度/rowHeight(dataGrid属性,行高),flash将自动将剩下的行数用undefinded类型的object补齐。
知道了原因就好办了,下面修改一下前面的代码(只需要在as中修改就可以了):
1、 新增变量resultRowNum
var resultRowNum:Number=0;
2、 在方法GetArray_3中给resultRowNum赋值:
function GetArray_3(myDB){
resultRowNum=myDB.length;
gb_main.dataProvider=myDB;
trace(gb_main.dataProvider.length);
}
3、 对DataGrid组件gb_main的change事件进行处理,如果DataGrid是新增行,让变量resultRowNum等于DataGrid组件gb_mai中有数据的最大值。
ls_mdc = new Object();
ls_mdc.change = function(evt){
var tgb:Object=evt.target;
if (tgb.selectedIndex>(resultRowNum-1)){
resultRowNum=tgb.selectedIndex;
}
}
gb_main.addEventListener("change",ls_mdc);
4、 修改按钮dbBind3_bt的处理函数,提交DataGrid组件gb_mai到WS:
this.dbBind3_bt.onPress=function(){
//trace(gb_main.dataProvider[1]);
trace(gb_main.dataProvider.length);
var i:Number=0;
var tCar:Array=new Array();
trace(resultRowNum);
for (i=0;i<resultRowNum;i++){
tCar.push(gb_main.dataProvider[i]);
trace(tCar[i].model);
}
//tCar=gb_main.dataProvider;
/*for (i=0;i<(tCar.length/2-1);i++){
trace(tCar[i].model);
}
*/
var op_8:PendingCall=myws.GetArray_4(tCar);
op_8.onResult=GetArray_4;
}
这样,就可以了。可惜,如果MM公司提供一个类似trim的函数,将dataProvider中数据类型为undefinded的元素裁剪掉,那不就方便多了,免得我们做这么多无用功。
相关文章推荐
- 在Flash中调用WS时的身份验证_2:输入与输出
- 在Flash中调用WS时的身份验证_1:Hello
- [CSharp]使用MSSOAPLib30调用WS的身份验证问题
- 在Flash中调用WS时的身份验证_3:基本数据类型
- 在Flash中调用WS时的身份验证_4:数组
- 在Flash中调用WS时的身份验证_5:将数组传递到ws
- 在Flash中调用WS时的身份验证_6:ws调用的用户验证和授权访问
- 在Flash中调用WS时的身份验证_6:客户端
- 关于初学WCF时,调用方未由服务进行身份验证的问题
- 调用WCF的问题:调用方未由服务器进行身份验证
- C#调用java-ws(带身份验证功能)
- 关于UrlHttpConnection.setRequestProperty()的调用顺序问题的验证
- C#中关于:“找不到请求的 .Net Framework Data Provider。可能没有安装。”问题
- 用java servlet返回jquery异步调用后出现的data不等于想要的内容 问题的解决
- WCF身份验证失败问题解决
- 调用方未由服务进行身份验证
- 防止因为自动缓存,导致flash调用http请求返回304的问题
- java中multipart/form-data方式提交表单添加验证问题
- 解决WCF 调用方未由服务器进行身份验证或消息包含无效或过期的安全上下文令牌
- 关于LR中lrs_accept_connection函数中获取data.ws中端口号问题解决方法