在运行时加载flex的flash符号

时间:2011-03-28 08:32:27

标签: flex actionscript-3 flex4 runtime

嘿嘿,我在运行时从应用程序中的swf文件加载符号时遇到了这个大问题。我想加载它并将其作为参数传递给另一个可以进一步使用的类。符号名称从“o”对象的数组集合中传递。任何人都可以告诉我什么是正确的方法..提前谢谢.. !!

以下是参考代码..

public override function Show(o:ObjectProxy):void
    {
        var _this:Weather;
        var _super:ContentItem;
        var item:WeatherItem;
        var items:ArrayCollection;
        var widgetCount:Number;
        var headlineFontSize:int;
        var conditionsIconThemeLoader:Loader;

        this.m_weatherWidgetContainer = new HBox();

        super.Show(o);

        _this = this;
        _super = super;

        (undefined == o["HeadlineFontSize"]) ? headlineFontSize = 20 : headlineFontSize = o["HeadlineFontSize"];

        if (undefined != o["direction"])
            this.m_textDirection = o["direction"];

        if (o.LargeUrl.Forecast is ArrayCollection)
            items = ArrayCollection(o.LargeUrl.Forecast);
        else
            items = new ArrayCollection([o.LargeUrl.Forecast]);

        widgetCount = this.m_computeWidgetSpace(items.length);

        conditionsIconThemeLoader = new Loader();

        conditionsIconThemeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void
        {
            for(var i:uint = 0; i < widgetCount; i++)
            {
                var symbolClass:Class = e.currentTarget.loader.contentLoaderInfo.applicationDomain.currentDomain.getDefinition(int(items[i].condition)) as Class;
                var symbolInstance:Sprite = new symbolClass();

                item = new WeatherItem();
                item.Show(items[i], headlineFontSize, symbolInstance, widgetCount);

                _this.m_weatherWidgetContainer.addChild(item);
            }
        });

        conditionsIconThemeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void
        {
            Alert.show("Failure loading " + WidgetStylesheet.instance.Weather_Widget_Theme + ".swf");
        });

        // Attempt to load theme weather icon file
        conditionsIconThemeLoader.load(new URLRequest("assets/animation/" + WidgetStylesheet.instance.Weather_Widget_Theme + ".swf"));

        super.media.addChild(this.m_weatherWidgetContainer);
    }

1 个答案:

答案 0 :(得分:0)

继承人的回答

public override function Show(o:ObjectProxy):void
{
    var _this:Weather;
    var _super:ContentItem;
    var conditionsIconThemeLoader:Loader;
    var loaderContext:LoaderContext;

    this.m_weatherWidgetContainer = new HBox();
    this.m_weatherWidgetContainer.percentHeight = 100;
    this.m_weatherWidgetContainer.percentWidth = 100;
    super.Show(o);

    _this = this;

    (undefined == o["HeadlineFontSize"]) ? this.m_headlineFontSize = 20 : this.m_headlineFontSize = o["HeadlineFontSize"];

    if (undefined != o["direction"])
        this.m_textDirection = o["direction"];

    if (o.LargeUrl.Forecast is ArrayCollection)
        this.m_items = o.LargeUrl.Forecast;
    else
        this.m_items = new ArrayCollection([o.LargeUrl.Forecast]);

    conditionsIconThemeLoader = new Loader();
    loaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);

    conditionsIconThemeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.m_loaderSuccess);
    conditionsIconThemeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, this.m_loaderFail);

    // Attempt to load theme weather icon file
    conditionsIconThemeLoader.load(new URLRequest("assets/animation/" + WidgetStylesheet.instance.Weather_Widget_Theme + ".swf"), loaderContext);

    this.m_weatherWidgetContainer.addEventListener(FlexEvent.CREATION_COMPLETE, this.m_drawHorizontalLine);

    super.media.addChild(this.m_weatherWidgetContainer);
}