开发者

load symbol of flash in flex at runtime

Hey people, I've this huge problem loading a symbol from a swf file in the application at runtime. I want to load it and pass it as a argument to another class where it could be used further. The symbol name is passed on from the array collection from the "o" object. Can anybody please tell me what's the right way to go about it.. Thanks in advance..!!

Following is the code for reference..

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);
    }


Heres the answer

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);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜