运行环境:Flash cs5,robotlegs
基本的类:
Command:MyCommand
Model:MyModel
Context:MyContext
在MyContext的startup函数如下:
override public function startup():void { //model this.injector.mapSingleton(MyModel); this.commandMap.mapEvent(ContextEvent.STARTUP_COMPLETE, MyCommand); super.startup(); }
MyModel中有个属性名为userVo,具体的代码就贴了~~
MyCommand类如下:
package control { import org.robotlegs.mvcs.Command; import model.MyModel; import vo.UserVo; /** * ... * @author ywxgod */ public class MyCommand extends Command { [Inject] public var myModel:MyModel; override public function execute():void { trace(myModel);//此处输入为null myModel.userVo = new UserVo(); } } }
问题描述:
MyContext保证已经实例化,且contextView属性已赋值,且已添加到舞台。但运行时,MyCommand中execute函数的输出总是null。以前用Flex+robotLegs时从未出现这样的问题,所以考虑到应该是Flash中Inject元数据不起作用,即flashIDE编译器无法识别Inject元数据。在Flex中我们可以自定义编译参数,但是flashIDE中似乎无法自定义编译参数。所以问题,就不知如何处理了。
解决方法:
最后,google了很久找到一个简单方法,打开SWF文件的“发布设置”对话框,勾选“导出SWC”这一项,即可。默认的是没有勾选这一项的。至于具体的原因和弊端,有些相关英文资料,有兴趣的看看吧:
http://knowledge.robotlegs.org/kb/framework-core/is-robotlegs-compatible-with-the-flash-ide-cs3cs4
http://www.geekgonenomad.com/2011/01/20/robotlegs-publish-to-swc-gotcha/
http://www.helmutgranda.com/2009/12/02/robotlegs-and-flash-ide-cs4-injection/
今天突然发现:
https://github.com/robotlegs/robotlegs-framework/wiki/Common-Problems 有非常详细的解释和解决方法,截个图来: