请教:Fluorine和Flex交互的问题

bworm
2008-03-05 15:41:09  来自: bworm

hello,各路高手:
第十四章,p391
internal function convertToData(result:Object):void
{

var info:ArrayCollection=result as ArrayCollection;
var datas : ArrayCollection = new ArrayCollection();


for(var i:int = 0;i<info.length;i++)
{
var n : noteVO = new noteVO();
n.fill(info.getItemAt(i));
datas.addItem(n);
}

theModel.notes = datas;
}

TypeError: Error #1009: 无法访问空对象引用的属性或方法。

初步诊断是因为info.length引发的错误,求助是什么原因导致的这个问题?


注:因为我的项目主要是C#,所以采用了Fluorine+C#+Flex进行开发,数据连结没有问题,返回值是DataTable,网上查资料得知,Flex2可以直接把DataTable解析为Array,不知道有没有人和我有一样的需求,高手帮忙啊!

   
walktree

2008-03-06 10:40:30 walktree

bworm ,你好,fluorine官方站点上有对应的文档说明:http://fluorine.thesilentgroup.com/fluorine/typeconversionamf3.html

System.Data.DataTable 对应的是as3中的 ASObject,不能直接转换为ArrayCollection。

建议你尝试用 for in 循环读取info,再把里面的每条数据转为VO类型。



bworm

2008-03-07 11:49:45 bworm

walktree感谢你的提示,我对AS不熟悉,按你的思路,我做了如下改变,现在这样Debug不报错了,但是取出的都是空值,不知道我的这种做法对不对,请指教!
internal function convertToData(result:Object) : void
{
var info : ArrayCollection = new ArrayCollection();
for(var i : Object in result)
{
var n : noteVO = new noteVO();
n.user_name = result[i].user_name;
n.nid = result[i].nid;
n.user_email = result[i].user_email;
n.title = result[i].title;
n.reply = result[i].reply;
n.content = result[i].content;
n.date = result[i].date;
info.addItem(n);
}

theModel.notes = info;
}



walktree

2008-03-07 13:45:49 walktree

经过查找资料,发现amf3支持更方便的类型转换,.net端的VO可以直接转为as中的vo。flash.net.registerClassAlias这个类便是专门用来解决这类问题的。
可以参考这篇文章:http://www.riafan.com/article.asp?id=85
有源码下载。



walktree

2008-03-07 13:49:20 walktree

更正下,System.Data.DataTable 对应的是as3中的 ASObject,是可以转换为ArrayCollection的。很抱歉,希望别误导了bworm。



bworm

2008-03-07 20:51:11 bworm

那篇文章我也看到了,受益匪浅。
但还是对如何把System.Data.DataTable 对应到as3的ArrayCollection还是存在疑问,
如果是可以直接转换,那么下面的代码问什么回报错呢?

//result是.net返回的DataTable
var info : ArrayCollection = result as ArrayCollection;
//下面这个调试会抱错:TypeError: Error #1009: 无法访问空对象引用的属性或方法。
var int = info.length;

很感谢 walktree 不厌其烦的解答:)



walktree

2008-03-13 10:50:32 walktree

上面连结中的提供的源代码:
c#:
[DataTableType("tutorials.remoting.vo.Student")]
public DataTable getDataTable()
{
dt = DB.getDataTable(conStr, sqlStr);
return dt;
}
tutorials.remoting.vo.Student 是C#定义的一个 valueObject。

Flex:
registerClassAlias("tutorials.remoting.vo.Student", Student);
var ac:ArrayCollection = re.result as ArrayCollection;

Student是as定义的valueObject,和服务端的结构一样。

具体可以看源代码,还包含其它类型的转换。





这个小组的读者也喜欢去   · · · · · · 

Flex
Flex (82)
ActionScript开发
ActionScript开发 (1033)
OpenFlex
OpenFlex (16)
ECMAScript
ECMAScript (159)
蔡淳佳
蔡淳佳 (138)
金融危机改变了我们什么?
金融危机改变了我们什么? (11)