我正在使用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');
}
我已经尝试过了:
试图查看该类的生成代码,但没有帮助我
if (this.hasEventListener("propertyChange")){
this.dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this, "lecture", oldValue, value));
}
我如何监听并将填充的对象放在另一个类中? 也许问题是我正在从另一个班级听,但在这种情况下我该如何实现呢? 似乎事件已经发送,但我无法听取它。
答案 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)