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 请求的命令

change 属性事件在内部用于观察者,不会在整个组件中调度。您想要为您做的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();
        }
   }
}

您应该真正阅读Binding 的工作原理

于 2011-04-18T17:11:08.207 回答
-1

考虑使用BindingUtils类。您可以在此处找到文档。还有几个使用示例:one , two

于 2011-04-18T17:04:05.877 回答