PureMvc(Flex)中如何响应Popup里面的Event

本文详细阐述了解决PureMVC框架中PopupWindow内部事件无法被Mediator响应的问题,包括如何在SystemManager上添加事件监听以及通过SystemManager中转实现事件在Mediator和PopupWindow之间的有效传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

才解决了Render里的Event的Bubble Up的问题,又遇到新问题:

我用PopupManager显示的一个新创建的弹出式窗口
     var popWin:MyPopupWindow = MyPopupWindow.new()
里面要dispatchEvent一个事件,目的是从服务器端取得所需数据。问题来了,dispatchEvent一个事件,没有Mediator可以'听'到,想用PureMvc的方式为PopupWindow单独注册Mediator也不行(相当别扭)。

怎么办呢?

然后Google到好文一篇:http://www.munkiihouse.com/?p=45

这下清楚了,原来所有UIComponent的Parent是Application,而所有Popup的Parent是Application的上级SystemManager。也就是说,你在UICompent上addEventListener是不行的,必须要在SystemManager上addEventListener,还好,每个UICompent都有一个指向SystemManager的属性。

错误代码:
       userUIComponent.addEventListener(PopupWindow.USER_EVENT,  doSomething)

正确代码:
      userUIComponent.systemManager.addEventListener(PopupWindow.USER_EVENT, doSomething)

这样就可以在Mediator中响应Popup里面的事件了,注意:userUIComponent是任意一个ViewComponent, 因为不管那个ViewComponent的systemManager都是指向同一个SystemManager。

完了吗?还没有,Mediator中响应事件后从服务器端接受到了数据,怎么传给PopupWindow呢?因为PopupWindow是在PureMVC的体系之外的(是没有注册的),所以用普通的Mediator传给ViewComponent的办法是不行的。不过找到一个变通的解决办法:

还是要通过SystemManager中转:
    Mediator收到服务器的应答响应后,利用ViewComponent(任意)重发Event:
        myUI.dispatchEvent(new Event('ServerResponse', true));
然后在PopupWindow中监听SystemManager的事件就OK了:
        this.systemManager.addEventListener('ServerResponse', doSomething)

问题解决。

转载:http://blog.sina.com.cn/s/blog_538d55be0100hztl.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值