1. #1
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144

    FLEX: HTTPService LastResult in ArrayColl steken (XML)

    Hallo allemaal.

    Ik zit weer met een obstakel waar ik niet voorbij geraak.
    Alvorens het probleem: hier de code

    FLEX APPLICATION
    Code:
    		protected function getMoviesFromDB_clickHandler(event:Event):void
    			{
    				cursorManager.setBusyCursor();
    				acMovies.removeAll();				
    				GetMovieSrv.send();
    			}
    			
    			// Fill AC with XML data from httpService
    			import mx.rpc.events.ResultEvent;
    			public function filler(event:ResultEvent):void{
    				
    				acMovies.source = GetMovieSrv.lastResult.movies.movie;
    				//GetMovieSrv.lastResult.movies.movie
    				cursorManager.removeBusyCursor();
    			}
    		]]>
    	</fx:Script>
    
    	<fx:Declarations>
    		<s:HTTPService id="GetMovieSrv" result="filler(event)" url="http://localhost/getMoviesUser.php"/>
    		<s:ArrayCollection id="acMovies"/>
    		
    		<mx:WipeUp id="myWU" duration="300"/>
    		<mx:WipeDown id="myWD" duration="300"/>
    		<mx:WipeRight id="myWR" duration="300"/>
    	</fx:Declarations>
    XML data die we terug krijgen
    Code:
    <movies>
    <movie>
    <title>Aladdin</title>
    <year>1992</year>
    <plot>
    Aladdin, a street urchin, accidentally meets Princess Jasmine, who is in the city undercover. They love each other, but she can only marry a prince.
    </plot>
    <img>
    http://ia.media-imdb.com/images/M/MV5BMTg0NDY5MzM3OF5BMl5BanBnXkFtZTYwNjUzNzM5._V1._SX320.jpg
    </img>
    <rating>8</rating>
    <time>1hr30mins</time>
    </movie>
    <movie>
    <title>Shrek</title>
    <year>2001</year>
    <plot>
    An ogre, in order to regain his swamp, travels along with an annoying donkey in order to bring a princess to a scheming lord, wishing himself King.
    </plot>
    <img>
    http://ia.media-imdb.com/images/M/MV5BMzk2MzYwOTY0N15BMl5BanBnXkFtZTcwOTg4NDUxMQ@@._V1_SX320.jpg
    </img>
    <rating>8</rating>
    <time>1 hr 30 mins</time>
    </movie>
    </movies>
    In flex krijg ik dit te zien bij mijn result in network view:
    http://i42.tinypic.com/flzr83.jpg

    Nu wil ik dus die info die ik adh van mijn httpService krijg in een arrayColl (id="acMovies") krijgen zodat ik deze later kan aanspreken en in een datagrid steken bv.
    Dit lukt mij dus niet, ik krijg steeds een applicatie die werkt maar niets in die ac steekt.

    Als ik een Alert.show(GetMovieSrv.lastResult.movies.movie[0].title.toString()); doe krijg ik wel Alladin te zien.

    Iemand een idee hoe ik best te werk ga?
    no votes  

  2. #2
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    100% zeker ben ik er niet van, maar het lijkt me sterk dat een ArrayCollection XML ondersteunt. Wat ge dus zult moeten doen is de data eruithalen en in een Object steken. Bijvoorbeeld in een nieuwe klasse "Movie" die een aantal variabelen bevat om die data op te slaan.

    In die filler functie kunt ge dan gewoon die xml overlopen, telkens een nieuw Movie-object maken en dat in uw AC pushen.
    no votes  

  3. #3
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Ok dat versta ik dus niet

    Nieuwe klasse "Movie" (wat voor een klasse is dit?)

    Zou ik dan voor elke film (in dit voorbeeld Aladdin & dan Shrek) een object hebben?
    Dus nu 2 objecten?

    Sorry, maar alles wat ik niet kan zien begrijp ik niet zo goed vandaar mijn grote problemen met Flex en arrays, waar ik moeilijkheden heb de dingen te zien.
    no votes  

  4. #4
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    Die Movie klasse die ge zoudt aanmaken is gewoon om het gemakkelijker te maken voor u zelf, strikt gezien is ze absoluut niet nodig voor de werking. Ge kunt het ook gewoon in een Object steken hé, maar dan krijgt ge geen code-hinting en zijt ge zo naamloos bezig. + Als ge ooit eens verwerking wilt inbouwen voor het één of het ander is het gemakkelijk om dat in dat object te kunnen doen.

    Ge gaat inderdaad per film een object krijgen, een instantie van Movie.

    Even snel wat pseudo-code aangezien ik met wat andere dingen bezig ben:

    Code:
    [Bindable]
    public class Movie {
    	public var name:String;
    	public var year:uint;
    	public var duration:String;
    	public var plot:String;
    }
    En uw filler:

    Code:
    			public function filler(event:ResultEvent):void{
    				
    				//acMovies.source = GetMovieSrv.lastResult.movies.movie;
    				//GetMovieSrv.lastResult.movies.movie
    				
    				var movie:Movie;
    				
    				for each(var moviexml:XML in GetMovieSrv.lastResult.movies) {
    					movie = new Movie();
    					movie.plot = moviexml.name.text();
    					uwACDing.push = movie;
    				}
    				
    				cursorManager.removeBusyCursor();
    			}
    En dan in uw list niet vergeten die namen in te stellen van uw headers zodat em die waardes overneemt van de variabelen.
    no votes  

  5. #5
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Ok Zero, dit gaat belachelijk klinken, maar waar maak ik die Class in aan?
    Is dat vanboven boven mijn filler, of moet ik een apparte file aanmaken en ergens speciaal stokeren? Zo ja, hoe verwijs ik er dan naar?
    Ik heb dat gisteren geprobeert, maar krijg toch wel behoorlijk wat errors. Heb nog nooit met een klasse gewertk tbfair

    Toch al bedankt voor le hulp
    no votes  

  6. #6
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    Vergeet die klasse dan en baseer u enkel op dat tweede codeblok. Maar in plaats van een nieuwe Movie aan te maken maakt ge dan gewoon een generiek object aan.

    Dus:

    var movie:Object;
    ..
    movie = new Object();

    Bijkomende info over hetgeen wat ik eerst zei:

    Die Movie klasse zou een nieuw bestand zijn dat ge hebt aangemaakt, een nieuwe Actionscript Class in Flash Builder, met de naam Movie. Daar zou dan die code in staan en dan zou dat een object zijn dat ge kunt gebruiken. Het is gewoon een klasse zoals Object, maar het heeft een eigen naam, identificatie en variabelen waar ge dingen in kunt steken. Ge breidt de functionaliteit van Object uit als het ware. Is één van de basisbegrippen van OOP.
    no votes  

  7. #7
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Dit heb ik nu.

    Code:
    			public function filler(event:ResultEvent):void{
    				
    				//acMovies.source = GetMovieSrv.lastResult.movies.movie;
    				//GetMovieSrv.lastResult.movies.movie
    				//Alert.show(GetMovieSrv.lastResult.movies.toString());
    				
    				var resultXML:XML = XML(GetMovieSrv.lastResult.movies);				
    				var acMovies:ArrayCollection = new ArrayCollection();
    				var movie:Object;
    				
    				for each(var movieXML:XML in resultXML){
    					movie = new Object();
    					movie.title = movieXML.title.text();
    					movie.year = movieXML.year.text();
    					movie.plot = movieXML.plot.text();
    					movie.img = movieXML.img.text();
    					movie.rating = movieXML.rating.text();
    					movie.time = movieXML.time.text();
    					acMovies.addItem(movie);
    				}		
    				Alert.show(acMovies.toString());
    				//Geeft [Object] [Object]
    				cursorManager.removeBusyCursor();
    			}

    Het probleem is nu dat ik dus geen titels krijg te zien. Er komt niets tevoorschijn
    Enig idee waarom dit gebeurt? Ik krijg wel een [Object] [Object] als alert terug, maar ik weet dus niet hoe ik de titel zelf aanhaal?

    En mss moet ik die repeater er best bijsmijten als addChild eens die acMovies is gevuld?

    Code:
    <mx:Repeater dataProvider="{acMovies}" id="myRepMovie">
    								<s:Label text="{myRepMovie.currentItem.title}"/>
    							</mx:Repeater>
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in