1

フレックス付きのP2Pについて質問があります。P2Pを使用して2つのアプリケーション間でデータを渡す場合。次のエラーが発生します。

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


私はGoogleを使用して解決策を見つけるために数日を費やしましたが、そのエラーを取り除くことはできません。ObjectUtilsを使用して直接割り当て、括弧内にObjectUtilsを使用して新しいArrayCollectionを作成しようとしましたが、それでも問題を解決できません。


コードの目的:
  ->2人のユーザーがP2Pを介して接続します
  -> 1人目のユーザーが画像を操作できます(配列コレクションにオブジェクトとして保存されます)。
  -> 1番目のユーザーが更新されたArrayCollection(変更された画像を含む)を2番目のユーザーに送信します
  -> 2番目のユーザーの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を上書きします。最初のフィールドは「newObjectProxy(passedObject)」、2番目のフィールドは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 に答える