Archief - Twee keer op knop klikken vooraleer gewenst resultaat?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

QuietKillah

Legacy Member
Ik heb een probleem met mijn code.
ik moet namelijk 2 keer klikken op mijn btnCat,btnDog of btnPerson
vooraleer de juiste feeds worden ingeladen (horoscoop) en vooraleer
de buttongrid eropkomt.
iemand enig idee hoe dit komt?

ziehier code:
Code:
package be.howest.mm3.horoscope
{
	import be.howest.mm3.horoscope.HoroscopeVO;
	import be.howest.mm3.loaders.SettingsLoader;
	import be.howest.mm3.loaders.XMLLoader;
	import be.howest.mm3.horoscope.HoroscopeButton;
	import com.greensock.TweenLite;
	import com.greensock.easing.*;
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.sampler.NewObjectSample;
	import flashx.textLayout.formats.BlockProgression;
	import flash.text.TextField;
	
	public class Horoscope extends MovieClip
	{
		private static const SETTINGS_URL:String = "assets/xml/settings.xml";
		private var _settings:SettingsLoader;
		private var horoscopeCollection:Array;
		private var buttonGrid:Sprite;
		private var xmlldr:XMLLoader = new XMLLoader;
		private var block:Block = new Block;
		public function Horoscope()
		{
			var xmlLdr:XMLLoader = new XMLLoader;
			xmlLdr.addEventListener(XMLLoader.XML_LOADED, onLoaded);
			xmlLdr.load(SETTINGS_URL);
			loadSettings();
			btnCat.addEventListener(MouseEvent.CLICK,onCat);
			btnDog.addEventListener(MouseEvent.CLICK,onDog);
			btnPerson.addEventListener(MouseEvent.CLICK,onPerson);
		}
		private function loadSettings():void{
			_settings = SettingsLoader.getInstance();
			_settings.addEventListener(XMLLoader.XML_LOADED, onLoadXML);
			_settings.load(SETTINGS_URL);
		}
		private function onLoadXML(event:Event):void{
			//trace(_settings.feed + " & " + _settings.imagepath);
			xmlldr.addEventListener(XMLLoader.XML_LOADED, onLoaded);
			//xmlldr.load(_settings.Person);
		}
		private function loadChoice(choice:String):void{
			mvcSelected.txtSelected.text = "you have selected: " + choice.toString();
			if (choice == "Dog"){
				xmlldr.load(_settings.Dog);
				//trace(_settings.Cat);
			}
			else if(choice == "Cat"){
				xmlldr.load(_settings.Cat);
				//trace(_settings.Dog);
			}else if(choice == "Person")
			{xmlldr.load(_settings.Person);
				//trace(_settings.Person);
			}
		trace(choice);}
		public function onLoaded(event:Event):void{
			//trace(event.currentTarget.data);
			horoscopeCollection = new Array();
			var feed:XML = XML(event.currentTarget.data);
			var itemList:XMLList = feed.channel..item;
			
			for each(var xml:XML in itemList){
				var ho:HoroscopeVO = new HoroscopeVO();
				ho.title = xml.title;
				ho.description = xml.description;
				ho.pubDate = xml.pubDate;
				ho.guid = xml.guid;
				horoscopeCollection.push(ho);
			}
			//initview();
		}
		public function initview():void{
			buttonGrid = new Sprite();
			stage.addChild(buttonGrid);
			buildGrid();
			buttonGrid.addEventListener(MouseEvent.CLICK, onClick);
		}
		private function onClick(event:MouseEvent):void{
			var item:HoroscopeButton = event.target as HoroscopeButton;
			stage.addChild(block);
			block.x =  - block.width;
			block.y = stage.height/2 - block.height/2;
			TweenLite.to(block,1,{x:(stage.width)/2 - block.width, ease:Elastic.easeOut});
			//block.y = stage.height/2 - block.height/2
			//block.x = (stage.width - block.width)/2
			block.btnClose.addEventListener(MouseEvent.CLICK, onClose);
			block.Title.text = item.dataVO.title;
			block.Horoscope.text = item.dataVO.description;
			buttonGrid.removeEventListener(MouseEvent.CLICK, onClick);
			btnCat.removeEventListener(MouseEvent.CLICK,onCat);
			btnDog.removeEventListener(MouseEvent.CLICK,onDog);
			btnPerson.removeEventListener(MouseEvent.CLICK,onPerson);
			//trace(item.dataVO.title);
			//trace(item.dataVO.description);
		}
		private function onClose(event:MouseEvent):void{
			stage.removeChild(block);
			buttonGrid.addEventListener(MouseEvent.CLICK, onClick);
			btnCat.addEventListener(MouseEvent.CLICK,onCat);
			btnDog.addEventListener(MouseEvent.CLICK,onDog);
			btnPerson.addEventListener(MouseEvent.CLICK,onPerson);
		}
		
		function onCat(Event:MouseEvent):void{
			loadChoice("Cat");
			gotoAndStop(41);
			initview();
		}
		function onDog(Event:MouseEvent):void{
			loadChoice("Dog");
			gotoAndStop(41);
			initview();
		}
		function onPerson(Event:MouseEvent):void{
			loadChoice("Person");
			gotoAndStop(41);
			initview();
		}
		private function buildGrid():void{
			for( var i:int = 0; i<horoscopeCollection.length;i++){
				var button:HoroscopeButton = new HoroscopeButton(horoscopeCollection[i]);
				button.width = 70;
				button.height = 70;
				button.x= 160*(i%3)+80;
				button.y= 160*int(i/3)+80;
				buttonGrid.addChild(button);
			}
		}
	}
}

ook heb ik dit al geprobeerd maar dan krijg ik zelf men buttongrid niet meer:
Code:
private function loadChoice(event:Event):void{
	//mvcSelected.txtSelected.text = "you have selected: " + choice.toString();
	var xmlldr:XMLLoader = new XMLLoader;
	xmlldr.addEventListener(XMLLoader.XML_LOADED, onLoaded);
	//trace(event.currentTarget.toString());
	if (event.currentTarget.toString() == "[object Cat]"){
		gotoAndStop(41);
		trace("Cat");
		xmlldr.load(_settings.Cat);
		initview();
		mvcSelected.txtSelected.text = "you have selected: Cat";
	} else if (event.currentTarget.toString() == "[object Dog]"){
		gotoAndStop(41);
		trace("Dog");
		xmlldr.load(_settings.Dog);
		initview();
		mvcSelected.txtSelected.text = "you have selected: Dog";
	}else if (event.currentTarget.toString() == "[object Person]"){
		gotoAndStop(41);
		trace("Person");
		xmlldr.load(_settings.Person);
		initview();
		mvcSelected.txtSelected.text = "you have selected: Person";
	}
}

Zero Grav

Legacy Member
't Is moeilijk om zo door uw code te spitten, ik wil het wel eens bekijken als ge uw project in zijn geheel kunt tonen zodat ik het kan debuggen.

Zero Grav

Legacy Member
Volgens mij zijt ge het wachtwoord vergeten, 'k heb er alleszins geen moeten ingeven. ^^
'k Zal het eens bekijken, maar ik beloof niets natuurlijk.

Zero Grav

Legacy Member
Ok, dat ging iets sneller dan verwacht. Het probleem was dat ge direct initview(); ging uitvoeren bij het klikken op de knop waardoor die sneller werd uitgevoerd dan de xml kon worden ingeladen. Bij buildgrid had ge dan een horoscopeCollection.length() die 0 teruggaf met als gevolg dat er geen grid gebouwd werd. De tweede keer was het bestand al gedownload en ging het allemaal een pak sneller waardoor em wel op tijd was.

Code:
package be.howest.mm3.horoscope
{
    import be.howest.mm3.horoscope.HoroscopeButton;
    import be.howest.mm3.horoscope.HoroscopeVO;
    import be.howest.mm3.loaders.SettingsLoader;
    import be.howest.mm3.loaders.XMLLoader;
    
    import com.greensock.TweenLite;
    import com.greensock.easing.*;
    
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.sampler.NewObjectSample;
    import flash.text.TextField;
    
    import flashx.textLayout.formats.BlockProgression;
    
    public class Horoscope extends MovieClip
    {
        private static const SETTINGS_URL:String = "assets/xml/settings.xml";
        private var _settings:SettingsLoader;
        private var horoscopeCollection:Array;
        private var buttonGrid:Sprite;
        private var block:Block = new Block;
        
        public function Horoscope() {
            var xmlLdr:XMLLoader = new XMLLoader;
            xmlLdr.addEventListener(XMLLoader.XML_LOADED, onLoaded);
            xmlLdr.load(SETTINGS_URL);
            loadSettings();
        }
        
        private function loadSettings():void {
             _settings = SettingsLoader.getInstance();
            _settings.addEventListener(XMLLoader.XML_LOADED, loadChoice);
            _settings.load(SETTINGS_URL);
        }

        private function loadChoice(event:Event):void {
            var xmlldr:XMLLoader = new XMLLoader;
            xmlldr.addEventListener(XMLLoader.XML_LOADED, onLoaded);

            if (event.currentTarget is Cat){
                gotoAndStop(41);
                trace("Cat");
                xmlldr.load(_settings.Cat);
                xmlldr.addEventListener( XMLLoader.XML_LOADED, initview);
                mvcSelected.txtSelected.text = "you have selected: Cat";
            } else if (event.currentTarget is Dog){
                gotoAndStop(41);
                trace("Dog");
                xmlldr.load(_settings.Dog);
                xmlldr.addEventListener( XMLLoader.XML_LOADED, initview);
                mvcSelected.txtSelected.text = "you have selected: Dog";
            } else if (event.currentTarget is Person){
                gotoAndStop(41);
                trace("Person");
                xmlldr.load(_settings.Person);
                xmlldr.addEventListener( XMLLoader.XML_LOADED, initview);
                mvcSelected.txtSelected.text = "you have selected: Person";
            }
        }
        
        public function onLoaded(event:Event):void{

            horoscopeCollection = new Array();
            
            var feed:XML = XML(event.currentTarget.data);
            var itemList:XMLList = feed.channel.item;
            
            for each(var xml:XML in itemList){
                var ho:HoroscopeVO = new HoroscopeVO();
                ho.title = xml.title;
                ho.description = xml.description;
                ho.pubDate = xml.pubDate;
                ho.guid = xml.guid;
                horoscopeCollection.push(ho);
            }

            btnCat.addEventListener(MouseEvent.CLICK, loadChoice);
            btnDog.addEventListener(MouseEvent.CLICK, loadChoice);
            btnPerson.addEventListener(MouseEvent.CLICK, loadChoice);
        }
        
        public function initview(e:Event):void{
            trace("initView");
            buttonGrid = new Sprite();
            stage.addChild(buttonGrid);
            buildGrid();
            
            buttonGrid.addEventListener(MouseEvent.CLICK, onClick);
        }
        
        private function onClick(event:MouseEvent):void{
            var item:HoroscopeButton = event.target as HoroscopeButton;
            stage.addChild(block);
            block.x =  - block.width;
            block.y = stage.height/2 - block.height/2;
            TweenLite.to(block,1,{x:(stage.width)/2 - block.width, ease:Elastic.easeOut});

            block.btnClose.addEventListener(MouseEvent.CLICK, onClose);
            block.Title.text = item.dataVO.title;
            block.Horoscope.text = item.dataVO.description;
            buttonGrid.removeEventListener(MouseEvent.CLICK, onClick);
        }
        
        private function onClose(event:MouseEvent):void{
            stage.removeChild(block);
            buttonGrid.addEventListener(MouseEvent.CLICK, onClick);
        }

        private function buildGrid():void{
            trace(horoscopeCollection.length);
            
            for( var i:uint = 0; i < horoscopeCollection.length; i++) {
                var button:HoroscopeButton = new HoroscopeButton(horoscopeCollection[i]);
                    button.width = 70;
                    button.height = 70;
                    button.x= 160 * (i%3) + 80;
                    button.y= 160 * int(i/3) + 80;
                    
                    buttonGrid.addChild(button);
            }
        }
    }
}
De nieuwe code, ik heb ook uw if/else gewoon laten controleren op de klasse in plaats van de toString methode te gebruiken. Maar dat maakt niet veel uit.
Bij feed.channel.item stonden er trouwens 2 punten, heb ik ook eentje weggedaan.

Edit, ik heb in die code ook wel zowat alles wat in commentaar stond gewist om het wat leesbaarder voor mezelf te maken.

QuietKillah

Legacy Member
dankuwel! echt keihard bedankt
kging er wss nog veeeel men kop over gebroken hebben :)
nu kan ik et weer wa afwerken en doen :D

bedankt!

Zero Grav

Legacy Member
Ik zie nu ook wel dat ik in de snelheid de XML_LOADED eventListener pas na de effectieve load() heb gekoppeld. In praktijk zal dat wellicht niet snel misgaan, maar in theorie kunt ge het best even omdraaien.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan