1

我有一个关于 flex 的 P2P 的问题。使用 P2P 在两个应用程序之间传递数据时。我收到以下错误:

 warning: unable to bind to property 'piece' on class 'Object' (class is not an IEventDispatcher)


我花了几天时间使用 Google 尝试找到解决方案,但无法摆脱该错误。我尝试使用 ObjectUtils,直接分配,并在括号内使用 ObjectUtils 创建一个新的 ArrayCollection,但仍然无法解决问题。


代码目的:
  -> 两个用户通过 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" />

感谢您的帮助和时间!

4

1 回答 1

1

我弄清楚了问题所在以及如何解决它 - 部分感谢这些页面:
无法绑定警告:类不是 IEventDispatcher
Flex 警告:无法绑定到类 'Object' 上的属性 'foo'(类不是一个 IEventDispatcher)

我知道信息已成功发送到其他对等方,但问题是ArrayCollection 内部的对象无法绑定。

我对这个问题的解决方案如下:

  • 创建一个循环,发送 ArrayCollection 中的每个对象以及一个告诉您正在流式传输的 ArrayCollection 中的值的索引。

  • 现在,由于您正在“流式传输”数据,因此使用setItemAt()函数覆盖当前的 ArrayCollection,第一个字段为“ new ObjectProxy(passedObject) ”,第二个字段为passedIndex(注意):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);
}
于 2011-11-25T04:38:55.370 回答