-
Parameter listener must be non-null??
Can't figure out why I'm getting this error:
Error #2007: Parameter listener must be non-null.
I have traced the xml, so I know the values are loading, so don't know why I"m getting a "non-null" error.
The first value in the xml traces correctly, but then the error occurs.
I only receive the error when I pass the popup argument to createImageHolders, and I don't know why... I"m a 3.0 newb.
Code:
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.xml.*;
//xml loader
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
var url:URLRequest;
var fileURL:String;
var popupURL:String;
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("images.xml"));
var imageCounter:Number;
//load xml file
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
imageCounter = xmlData.image.length();
//parse the xml
for (var j:Number = 0; j < imageCounter; j++) {
fileURL = xmlData.image.attribute("file")[j];
popupURL = xmlData.image.attribute("popup")[j];
var externalLdr:Loader = new Loader();
externalLdr.contentLoaderInfo.addEventListener(Event.INIT, createImageHolders(popupURL,e));
url = new URLRequest(fileURL);
externalLdr.load(url);
}
}
function createImageHolders(popup:String, e:Event) {
trace(popup);
}
Associated XML file:
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<image file="images/portfolio_images/01_dentist_small.jpg" popup="01_dentist.jpg"></image>
<image file="images/portfolio_images/02_medical_small.jpg" popup="02_medical.jpg"></image>
<image file="images/portfolio_images/03_paving_small.jpg" popup="03_paving.jpg"></image>
<image file="images/portfolio_images/04_travel_small.jpg" popup="04_travel.jpg"></image>
<image file="images/portfolio_images/05_contractor_small.jpg" popup="05_contractor.jpg"></image>
<image file="images/portfolio_images/06_vet_small.jpg" popup="06_vet.jpg"></image>
<image file="images/portfolio_images/07_lawyer_small.jpg" popup="07_lawyer.jpg"></image>
<image file="images/portfolio_images/08_restaurant_asian_small.jpg" popup="08_restaurant_asian.jpg"></image>
<image file="images/portfolio_images/09_restaurant_pizza_small.jpg" popup="09_restaurant_pizza.jpg"></image>
</root>
Last edited by bmarker; 06-15-2009 at 03:44 PM.
-
Comment out your code (start with the loop) and re-introduce one line at a time until it errors again, then trace out all the objects and properties in that line to make sure they're defined.
-
thanks nez
I've been reading up, and I'm realizing I can't pass arguments to eventlisteners, so I don't know what I should be "commenting" out. But I'll post my solution. If anyone else has some true coding examples, it would be much appreciated.
-
You can't directly pass arguments to listeners, true. But you can have a function which binds your arguments to a new listener function.
Code:
function createImageHolders(popup:String) {
trace(popup);
}
function makeCreateListener(popup:String):Function{
return function(e:Event):void{
createImageHolders(popup);
}
}
Code:
externalLdr.contentLoaderInfo.addEventListener(Event.INIT, makeCreateListener(popupURL));
The FunctionUtils package that I keep pimping in response to similar questions has utility functions that make this more or less transparent for you.
http://cosmodro.me/blog/2008/aug/26/...ity-functions/
Code:
externalLdr.contentLoaderInfo.addEventListener(Event.INIT, FunctionUtils.closurizeEventHandler(createImageHolders, popupURL));
But you'd have to make createImageHolders take the event as the first parameter.
Code:
function createImageHolders(e:Event, popup:String) {
trace(popup);
}
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|