Flex手表可绑定属性其他类

时间:2011-04-18 16:39:17

标签: flex events properties bindable

我正在使用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)); }

  5. 我如何监听并将填充的对象放在另一个类中? 也许问题是我正在从另一个班级听,但在这种情况下我该如何实现呢? 似乎事件已经发送,但我无法听取它。

3 个答案:

答案 0 :(得分:1)

对于谁想要答案,我已经解决了更改addEventListener对象的问题。 这是不对的:

this.addEventListener(...)

改为使用:

lectureService.addEventListener(...)

我已将我的代码更改为在主应用MXML中侦听此事件,然后在处理程序方法内部调用组件的公共方法以使用新数据。

答案 1 :(得分:0)

只需扩展课程就无法解决所有问题。您应该真正查看Commands的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();
        }
   }
}

你应该真正阅读how Binding works

答案 2 :(得分:-1)

考虑使用BindingUtils类。您可以找到文档here。以及一些使用示例:onetwo