我有关于flex的P2P问题。 使用P2P在两个应用程序之间传递数据时。我收到以下错误:
warning: unable to bind to property 'piece' on class 'Object' (class is not an IEventDispatcher)
我花了几天时间使用Google尝试找到解决方案,但是无法摆脱这个错误。我已经尝试过使用ObjectUtils,直接赋值,并在括号内创建一个带有ObjectUtils的新ArrayCollection,但仍无法解决问题。
代码目的:
- >两个用户通过P2P连接
- > 1st 用户可以操作图片(存储为数组集合中的对象)
- > 第一个用户将更新的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" />
感谢您的帮助和时间!
答案 0 :(得分:1)
我弄清楚问题是什么以及如何修复它 - 部分感谢这些页面:
Unable to Bind warning: class is not an IEventDispatcher
Flex Warning: Unable to bind to property 'foo' on class 'Object' (class is not an IEventDispatcher)
我知道信息已成功发送给其他对等方,但问题是对象INSIDE ArrayCollection不能被绑定。
我对这个问题的解决方案如下:
创建循环,在ArrayCollection中发送每个对象以及索引,告诉您ArrayCollection中的值是什么流媒体。
现在,由于您正在“流式传输”数据,因此使用 setItemAt()函数覆盖当前的ArrayCollection,并将第一个字段设置为“新的ObjectProxy(传递对象)“和第二个字段作为传递索引(注意): 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);
}