4

我在 Flex 应用程序中使用 Starling。该应用程序使用 Parsley 框架并在视图上执行 IOC。

Starling 本质上不是普通的 Flash 显示对象。通常在 Parsley 项目中,如果我想在创建视图时动态注入,我只需调用 Configure.view(this).execute() 就可以了。

我想知道是否有一种方法可以在不使用 Configure.view 的情况下将数据模型动态地注入我的 Starling 视图中。感觉 Starling 视图不是普通 Flash 显示列表中的 DisplayObject。

4

2 回答 2

3

在我发布这个问题大约一个小时后,我通过与曾经为 powerflasher / FDT 工作并且对 Parsley 了如指掌的 Patrick Kulling 交谈找到了这个解决方案。

基本上你必须得到一个 Parsley Context 的实例,然后像这样调用 context.addDynamicObject 。

            [Inject]
            public var context:Context;

            [Init]
            private function onImagesReady( event : Event = null ) : void
            {
                     //star.root gives us a ref to MainGame witch is our starling view    
                    //that want parsley to do IOC on
                 context.addDynamicObject(star.root);
            }


                    //here is where we call the starling code and it creates an instance
            private function onCC() : void
            {
                star = new Starling( MainGame, stage );
                star.viewPort = new Rectangle(0, 0, width, height);
                star.start();
            }
于 2012-10-11T23:42:09.363 回答
0

看看采用 Parsley 与 Starling 一起使用的parsley-starling库。

它基于Parsley 的修改版本,对 Flash API 的依赖较少。

链接库后,StarlingViewManagerDecorator在创建上下文时添加:

ContextBuilder.newSetup()
    .services()
        .viewManager()
            .addDecorator(StarlingViewManagerDecorator, _starling)
    .newBuilder()
        .config(XmlConfig.forFile("config.xml"))
    .build();

之后使用StarlingConfigureStarling 的 DisplayObject 类来管理它:

import feathers.controls.Screen
public class NewsView extends Screen
{
    public function NewsView()
    {
        super();

        StarlingConfigure.view(this).execute();
    }
}
于 2013-07-23T08:18:58.837 回答