在Flash Builder 4.6里使用spark + Robotlegs

在spark里使用Robotlegs的小问题,官网现在还是mx框架,可能会有人遇到。

为了有一套好用的框架和组件改善开发环境,近期开始学习flex。因为之前几乎没有接触过flex,所以直接从FB4.6学起,直接开始用spark库。

自从7月份换了新工作接触到Robotlegs后,我就喜欢上这个框架,它非常自然、方便的解耦功能模块。所以学习flex第一步还是想继续使用Robotlegs框架,结果很快遇到了第一个问题。

问题1,使用contextView

在StartupCommand里添加组件,使用contextView.addChild报错,提示是spark里面废除了此方法,需使用addElement(现在想想,多大点事儿啊……当时确实太不了解flex,也不太了解Robotlegs。我当时的感觉应该和我妈用atm被吞卡差不多)。

其实解决方法很简单。在spark里,文档类——也就是<s:WindowedApplication>——是SkinnableContainer的子类,所以也是DisplayObjectContainer的子类,而Robotlegs框架里的contextView是DisplayObjectContainer类型,那么需要添加视图的时候很简单,这么做就好:

override public function execute():void {
  var container:SkinnableContainer = SkinnableContainer(contextView);
  var element:Panel = new Panel();
  container.addElement(element);
}

问题2,使用PopupManager

在Flex里,PopUpManager会把popup创建到contextView外面的显示列表中,所以robotlegs就无法获悉这个view是什么时候被加载的,也就无法适时创建mediator了。要解决这个问题,我们可以在需要的时候手工创建mediator,比如:

// 关联view和mediator时
mediatorMap.mapView(MyPopupView, MyPopupViewMediator, null, false, false); //禁用自动创建和自动移除

// 需要弹出popup时
var popup:MyPopupView = new MyPopupView();
PopUpManager.addPopUp(popup, contextView);
mediatorMap.createMediator(popup);

需要移除popup的时候,可以在下面两种方法中任选一种:

mediatorMap.removeMediator(mediator);
// 或
mediatorMap.removeMediatorByView(popup);

参考资料:How to Mediate a Flex Popup

作者: meathill

爱编程,爱旅游,爱吐槽。
今年的第一目标是成为一名优秀的讲师,做够 25 场直播,收集 1000 位听众! (12/25)
《Electron + Vue 实战开发》创作中……

《在Flash Builder 4.6里使用spark + Robotlegs》有一个想法

欢迎吐槽,请勿装死