我有一个关于P2P与flex的问题。当使用P2P在两个应用程序之间传递数据时。我得到以下错误:
warning: unable to bind to property 'piece' on class 'Object' (class is not an IEventDispatcher)
我花了几天时间用谷歌试图找到一个解决方案,但我不能摆脱这个错误。我试过使用ObjectUtils,直接赋值,并在括号内创建一个新的ArrayCollection与ObjectUtils,仍然无法解决问题。
代码用途:
,->两个用户通过P2P连接
,-> 第一个用户可以操作图片(存储在数组集合中的对象)。
,-> 第一个用户向第二个用户
发送更新的ArrayCollection(包含更改的图片),-> 第二个用户的ArrayCollection被更新,现在看到被操纵的图片
就我对Flex的了解而言(对它相当陌生),我正确地绑定了需要绑定的东西。使用弹出窗口和跟踪,我能够看到来自ArrayCollection的数据被正确复制,但它只是不想显示。
下面是我的一些代码片段:
[Bindable]
public var taken:ArrayCollection = new ArrayCollection ([
new picLayout(1,'sky.png'),
new picLayout(2,'bird.png')
])
public function receiveSomeData(pass:ArrayCollection):void
{
// Want to replace current version of variable "taken" with
// the one passed in using P2P
this.taken= new ArrayCollection(pass.source);
}
public function sendSomeData(free:ArrayCollection):void
{
sendStream.send("receiveSomeData",free);
}
<s:Button click="sendSomeData(taken)" label="Update" />
感谢您的帮助和时间!
我弄清楚了问题是什么,以及如何解决它-部分感谢这些页面:
无法绑定警告:类不是一个IEventDispatcher
Flex警告:无法绑定属性'foo'on class 'Object'(类不是一个IEventDispatcher)
我知道信息被成功地发送到另一个对等体,但问题是对象在 ArrayCollection中没有被绑定。
我对这个问题的解决方案如下:
-
创建一个循环发送ArrayCollection中的每个对象以及索引,该索引告诉您正在流式传输的ArrayCollection中的哪个值
-
现在,因为你是"流"的数据,覆盖当前的ArrayCollection,使用setItemAt()函数与第一个字段作为"新ObjectProxy(passsedobject)"和第二个字段作为 passsedindex (注):ObjectProxy()函数强制传递的对象是可绑定 。
下面是更新后的代码片段:
[Bindable]
public var takenPics:ArrayCollection = new ArrayCollection ([
new picLayout(1,'sky.png'),
new picLayout(2,'bird.png')
])
private function sendSomeData(data:Object, index:int):void
{
sendStream.send("receiveSomeData",data,index);
}
private function receiveSomeData(passedPic:Object,ix:int):void
{
// ObjectProxy needed to force a bindable object
takenPics.setItemAt(new ObjectProxy(passedPic),ix);
}
public function sendPictures():void
{
// ix < 2 because size of ArrayCollection is 2
for (var ix:int = 0; ix<2; ix++)
sendSomeData(takenPics[ix],ix);
}