在Flash Builder 4.6里使用spark + Robotlegs

为了有一套好用的框架和组件改善开发环境,近期开始学习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

如果您觉得文章内容对您有用,不妨支持我创作更多有价值的分享:


已发布

分类

来自

评论

《“在Flash Builder 4.6里使用spark + Robotlegs”》 有 1 条评论

  1. JERRY 的头像
    JERRY

    讚,感謝分享

欢迎吐槽,共同进步

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据