Переменные кодирования Flash AS3 инициализируются по-разному для каждого вызова - PullRequest
0 голосов
/ 11 декабря 2010

В моем проекте Flash CS5 / AS3 есть прокрутка контента, которую я хочу использовать в нескольких местах, загружая разный контент (html) в каждое из этих разных мест.

Ниже приведен код AS3для прокручиваемого текстового компонента.В compnentsettings.xml я определяю, какой файл .html вызывать.

Прямо сейчас у меня только скроллер работает в одном месте.Я могу клонировать его, но, конечно, он будет загружать те же данные.

Я считаю, что мне нужно изменить функцию settingsComponent из scrolledTextComponent.as (ниже) для загрузки различных файлов compnentSettings.xml

Мне понадобится переменная __xmlSettingsPath, инициализируемая по-разному для каждого вызова, и я понятия не имею, как это сделать.Пожалуйста, помогите!

package com
{
    import flash.display.*;
    import flash.events.TimerEvent;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.text.StyleSheet;
    import flash.utils.Timer;
    import flash.events.MouseEvent; 
    import flash.text.TextField;
    import flash.events.*;

    import com.LoadXmlPlayerClass;

    public class scrolledTextComponent extends MovieClip
    {

        // component variables
        private var __xmlSettingsPath:String = "componetsettings.xml";
        private var _sheet:StyleSheet = new StyleSheet();       
        public var _loadSettingsXml:LoadXmlPlayerClass = new LoadXmlPlayerClass();
        private var _settingsXmlTimmer:Timer = new Timer(250);    

        public var _loadXml:LoadXmlPlayerClass = new LoadXmlPlayerClass();
        private var _newsTimmer:Timer = new Timer(250);     


        //private var _loaderIcon_mc:LoaderMC = new LoaderMC(); //used to show xml loading state
        private var _urlCSS:URLRequest = new URLRequest();
        private var _loaderCSS = new URLLoader();

        private var _urlHTML:URLRequest = new URLRequest();
        private var _loaderHTML = new URLLoader();


        //text
        private var _txt:TextField = new TextField();
        private var _MyScrollBar:MyScrollBar = new MyScrollBar();

        public function scrolledTextComponent ()
        {
            loaderIcon_mc.visible=true;
            readSettingsXml();

        }



        /* Other Functions */
        private function readSettingsXml() :void
        {
            if(__xmlSettingsPath != '')
            {   
                //loaderIcon_mc.visible=false;
                //read XML file
                _loadSettingsXml.loadFile(__xmlSettingsPath);
                _settingsXmlTimmer.addEventListener(TimerEvent.TIMER,settingsComponent);
                _settingsXmlTimmer.start();
            }

        }

        //timmer
        private function settingsComponent(event:TimerEvent):void {
            //_settingsXmlTimmer.stop();
            //trace ("initial is running: "+_settingsXmlTimmer.running);
            if (_loadSettingsXml.isxmlread && _settingsXmlTimmer.running) {
                _settingsXmlTimmer.stop();
                //trace ("after is running: "+_settingsXmlTimmer.running);

                loaderIcon_mc.visible=true;
                loaderIcon_mc.x=(_loadSettingsXml._myXml.record[0].scrollComponentWidth-loaderIcon_mc.width)/2;
                loaderIcon_mc.y=(_loadSettingsXml._myXml.record[0].scrollComponentHeight-loaderIcon_mc.height)/2;



                _txt.width = _loadSettingsXml._myXml.record[0].scrollComponentWidth-40;
                _txt.height = _loadSettingsXml._myXml.record[0].scrollComponentHeight;
                _txt.mouseWheelEnabled=true;
                _txt.multiline = true;
                _txt.wordWrap = true;
                _txt.selectable = true;
                _txt.condenseWhite=true;
                _txt.border=false;

                _txt.x=0;
                _txt.y=0;



                if (_loadSettingsXml._myXml.record[0].cssStylesPath!='') {
                    _urlCSS=new URLRequest(_loadSettingsXml._myXml.record[0].cssStylesPath);
                    _loaderCSS.addEventListener(Event.COMPLETE, onCSSFileLoaded);
                    _loaderCSS.load(_urlCSS);
                }               

            } 
        }               


        private function readHTML() :void
        {
            if (_loadSettingsXml._myXml.record[0].htmlPath!='') {
                _urlHTML=new URLRequest(_loadSettingsXml._myXml.record[0].htmlPath);
                _loaderHTML.addEventListener(Event.COMPLETE, onHTMLFileLoaded);
                _loaderHTML.load(_urlHTML);
            }
        }


        private function addHTMLandScroll() :void
        {
            addChild(_txt);
            if (_txt.height<_txt.textHeight) {
                _MyScrollBar.x=_txt.x+_txt.width+20;
                _MyScrollBar.y=_txt.y+14;
                _MyScrollBar._height=_txt.height-28;
                _MyScrollBar._txt=_txt;
                _MyScrollBar.scrollable_area_mc.height=_txt.height-28;
                _MyScrollBar.scrollDownButton.y=_txt.height-14;
                _MyScrollBar.initPublicVars();
                addChild(_MyScrollBar);
            }           
        }       


        private function onCSSFileLoaded(event:Event):void  {
            _sheet.parseCSS(_loaderCSS.data);
            //_timer_txt.styleSheet = sheet;
            _txt.styleSheet = _sheet;
            readHTML();
        }       

        private function onHTMLFileLoaded(event:Event):void {
            _txt.htmlText = _loaderHTML.data;
            loaderIcon_mc.visible=false;
            addHTMLandScroll();
        }           


    }

}

Любой совет, как это сделать?Я немного новичок в этом ..

1 Ответ

0 голосов
/ 11 декабря 2010

Ну, из того, что я получаю, вы хотите, чтобы __xmlSettingsPath устанавливался за пределами класса каждый экземпляр, обряд ??

Вы можете сначала не инициализировать переменную или установить пустую строку, поскольку у вас есть проверки для других функций, где она используется.

private var __xmlSettingsPath:String = "";

Изменить конструктор, чтобы он принимал переменную.

public function scrolledTextComponent (XmlPath:String)
    {
        __xmlSettingsPath:String = XmlPath;

        loaderIcon_mc.visible=true;
        readSettingsXml();    
    }

Таким образом, в основном вы должны внести два вышеупомянутых изменения и при вызове класса компонента вызвать его как

new scrolledTextComponent(XmlPathforThisInstance)

Надеюсь, что нет других проблем, так как я плохо выглядел на коде.


Edit:

Чтобы вызывать разные экземпляры, вы можете объявить переменные для назначения объектов diff.

var FirstInstance: scrolledTextComponent = new scrolledTextComponent (FirstXmlPath)

var ThirdInstance: scrolledTextComponent = new scrolledTextComponent (ThirdXmlPath)

var FifthInstance: scrolledTextComponent = new scrolledTextComponent (FifthXmlPath)

.... так далее

...