1

Flex 4を使用してアプリケーションを作成しています。アプリを起動すると、XMLファイルが読み取られ、オブジェクトにデータが入力されます。.send()呼び出しは非同期であるため、この入力されたオブジェクトをリッスン/監視し、終了したら、他のクラスにイベントをディスパッチして、他のクラスが使用できるようにします。

package model{
    public class LectureService extends HTTPService{
        [Bindable]
        private var _lecture:Lecture;

        ...
}

xmlは正しく解析され、Lectureクラスのオブジェクト講義内にロードされます。

main.mxmlアプリでMXML表記を使用すると、正常に機能します(オブジェクトは、非同期要求の後に入力されたときに使用されます)。

<mx:Image id="currentSlide" source={lectureService.lecture.slides.getItemAt(0).path} />

しかし、別のActionScriptクラスがあり、このディスパッチされた([Bindable]による)イベントをリッスンできません。

package components{

    public class LectureSlideDisplay extends Image
    {       
        public function LectureSlideDisplay()
        {
            super();

            this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onChangeTest);
        }

        private function onChangeTest(e:PropertyChangeEvent):void {
            trace('test');
        }

私はすでに試しました:

  1. (上記のように)addEventListener(PropertyChangeEvent.PROPERTY_CHANGE、methodName)を使用します。
  2. [Bindable]を[Bindalbe( "nameEvent")]に変更して、これをリッスンしようとしましたが、何もしませんでした。
  3. CreateWatcherメソッドを使用すると、機能しません。
  4. クラスの生成されたコードを調べようとしましたが、役に立ちませんでした

    if (this.hasEventListener("propertyChange")){ this.dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this, "lecture", oldValue, value)); }

どうすれば、入力されたオブジェクトを別のクラスでリッスンして取得できますか?別のクラスから聞いていることが問題かもしれませんが、この場合、これをどのように実装できますか?イベントが派遣されているようですが、聞き取れません。

4

3 に答える 3

1

答えが欲しい人のために、私はaddEventListenerオブジェクトを変更することを解決しました。使用するのは正しくありません:

this.addEventListener(...)

代わりに使用してください:

lectureService.addEventListener(...)

メインアプリのMXMLでこのイベントをリッスンするようにコードを変更し、ハンドラーメソッド内で、コンポーネントのパブリックメソッドを呼び出して新しいデータを使用します。

于 2011-04-19T11:56:46.953 に答える
0

クラスを拡張するだけでは、すべての問題を解決することはできません。HTTPリクエストのコマンドを実際に調べる必要があります。

プロパティの変更イベントはウォッチャーの内部で使用され、コンポーネント全体ではディスパッチされません。あなたがあなたのためにしたいことはLectureSlideDisplay、ソースセッターをオーバーライドすることです。呼び出されるたびに、新しい値がバインドされます。

package components{

    public class LectureSlideDisplay extends Image
    {      
        override public function set source(value:Object):void
        {
           super.source = value;
           // do whatever
        } 

        public function LectureSlideDisplay()
        {
            super();
        }
   }
}

バインディングがどのように機能するかを実際に読む必要があります。

于 2011-04-18T17:11:08.207 に答える
-1

BindingUtilsクラスの使用を検討してください。ここにドキュメントがあります。そして、いくつかの使用1、2

于 2011-04-18T17:04:05.877 に答える