<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>AaronHardy.com &#187; Loader</title>
	<atom:link href="http://aaronhardy.com/tag/loader/feed/" rel="self" type="application/rss+xml" />
	<link>http://aaronhardy.com</link>
	<description>For all your Aaron Hardy needs.</description>
	<lastBuildDate>Fri, 20 Apr 2012 14:53:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Showing Progress for Multiple Loaders</title>
		<link>http://aaronhardy.com/flex/showing-progress-for-multiple-loaders/</link>
		<comments>http://aaronhardy.com/flex/showing-progress-for-multiple-loaders/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 04:28:00 +0000</pubDate>
		<dc:creator>Aaron Hardy</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[bytesLoaded]]></category>
		<category><![CDATA[bytesTotal]]></category>
		<category><![CDATA[Loader]]></category>
		<category><![CDATA[LoaderInfo]]></category>
		<category><![CDATA[overall progress]]></category>
		<category><![CDATA[progress indicator]]></category>
		<category><![CDATA[URLLoader]]></category>

		<guid isPermaLink="false">http://aaronhardy.com/?p=365</guid>
		<description><![CDATA[A common thing to do in most any rich application is to show progress while loading remote assets. In ActionScript, the bytesLoaded and bytesTotal properties of classes such as LoaderInfo and URLLoader provide the needed information to show a fancy percentage-based progress indicator. The bytesLoaded property is updated as more and more of the asset [...]]]></description>
			<content:encoded><![CDATA[<p>A common thing to do in most any rich application is to show progress while loading remote assets.  In ActionScript, the bytesLoaded and bytesTotal properties of classes such as <a href="http://livedocs.adobe.com/flex/3/langref/flash/display/LoaderInfo.html" target="_blank">LoaderInfo</a> and <a href="http://livedocs.adobe.com/flex/3/langref/flash/net/URLLoader.html" target="_blank">URLLoader</a> provide the needed information to show a fancy percentage-based progress indicator.  The bytesLoaded property is updated as more and more of the asset is loaded in.  Divide that by the bytesTotal and you have the percentage loaded.</p>
<p>Easy enough.  How about multiple loaders?  Lets say you have a group of 10 images and you&#8217;d like to show progress for all the images collectively.  Because you have 10 different images you also have 10 different URLLoader instances (or Loader instances, whatever suits your fancy)&#8211;one for each image.  Math would say that you divide the sum of bytesLoaded by the sum of bytesTotal and that gives you the percentage complete.  Two issues arise:<span id="more-365"></span></p>
<p>(1) The progress indicator really shouldn&#8217;t be involved with handling all these loaders and tallying their numbers.  Its purpose is to display the percentage loaded and it should stick to what it does best.</p>
<p>(2) One important thing to know about ActionScript classes that expose progress information is that the bytesTotal property is not populated until the server responds to the request (until the HTTP headers are received).  This makes things a little more complex.  Let&#8217;s say the first loader begins loading an image and it gets a few bytes loaded in.  At this point we for sure know how many total bytes the loader eventually will have loaded, but the other loaders may still be waiting for a response from the server and therefore their bytesTotal properties are still hanging out at 0.  What&#8217;s your denominator to determine overall percentage?  One option is to know the total number of bytes for each image before the loading process begins.  This information would need to be available beforehand through some sort of service call.  The more simple and usually sufficient approach is to take the number of completed loaders divided by the total number of loaders to determine the percentage loaded.  It&#8217;s not as granular as dealing with bytes, but it can be a good alternative for showing overall progress.</p>
<p>Below is a class I use to simplify this process and consolidate different objects that provide progress information.  Instances of information-providing classes such as LoaderInfo and URLLoader are registered using the register() method.  As the loaders progress, the percentLoaded property is updated and progress events are dispatched.  If only a single loader is registered, percentLoaded will reflect bytesLoaded/bytesTotal.  If multiple loaders are registered, percentLoaded will reflect loaders complete/loaders total.  When all loaders have completed loading, a complete event is dispatched.  Enjoy!</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package com.<span style="color: #006600;">aaronhardy</span>.<span style="color: #006600;">utils</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">EventDispatcher</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">IEventDispatcher</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">IOErrorEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">ProgressEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">setTimeout</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>Event<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;progress&quot;</span>, <span style="color: #0066CC;">type</span>=<span style="color: #ff0000;">&quot;flash.events.ProgressEvent&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #66cc66;">&#91;</span>Event<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>=<span style="color: #ff0000;">&quot;complete&quot;</span>, <span style="color: #0066CC;">type</span>=<span style="color: #ff0000;">&quot;flash.events.Event&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #808080; font-style: italic;">/**
	 * A object which consolidates a group of objects that provide progress information.  Types
	 * of objects include UrlLoader and LoaderInfo objects. This allows a simple way for displaying
	 * overall progress for multiple loaders.
	 * 
	 * When a single loader is registered, the percentLoaded is simply the bytes loaded divided by
	 * the bytes total for the loader.  When there are multiple loaders registered, percentLoaded
	 * reflects the number of loaders completed divided by the total number of registered loaders.
	 * The reason why using multiple loaders is less accurate is because a loader does not know
	 * how many bytes it will be loading until the first response from the server.
	 * This means that we can't determine the total number of bytes to be loaded
	 * for all registered loaders up front.
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BatchLoaderInfo <span style="color: #0066CC;">extends</span> EventDispatcher
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
		<span style="color: #808080; font-style: italic;">/**
		 * The percentage of all registered loaders which are loaded.
		 * When there is a single loader, this is simply the bytes loaded divided by the bytes total
		 * for the loader.  When there are multiple loaders, this is the number of loaders
		 * which have completed their loading process divided by the total number of registered
		 * loaders.  This value is between 0 and 1.
		 * @see doUpdateStats
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> percentLoaded:<span style="color: #0066CC;">Number</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * @private
		 * Registered loaders.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> loaders:<span style="color: #0066CC;">Array</span> = <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Registers a loader with the registry.
		 * @param loader Any object that dispatches ProgressEvent.PROGRESS, Event.COMPLETE, and
		 * IOErrorEvent.IO_ERROR events as well as provides bytesLoaded and bytesTotal properties.
		 * Examples include UrlLoader or LoaderInfo objects.
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> register<span style="color: #66cc66;">&#40;</span>loader:IEventDispatcher<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span>loader<span style="color: #66cc66;">&#41;</span> == -<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				loaders.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>loader<span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>, loaderProgressHandler<span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, loaderCompleteHandler<span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>IOErrorEvent.<span style="color: #006600;">IO_ERROR</span>, loaderErrorHandler<span style="color: #66cc66;">&#41;</span>;
				updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Unregisters a loader from the registry.
		 * @param loader Any object that dispatches ProgressEvent.PROGRESS, Event.COMPLETE, and
		 * IOErrorEvent.IO_ERROR events as well as provides bytesLoaded and bytesTotal properties.
		 * Examples include UrlLoader or LoaderInfo objects.
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> unregister<span style="color: #66cc66;">&#40;</span>loader:IEventDispatcher<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span>loader<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> -<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				loaders.<span style="color: #0066CC;">splice</span><span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span>loader<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span>, loaderProgressHandler<span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, loaderCompleteHandler<span style="color: #66cc66;">&#41;</span>;
				loader.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>IOErrorEvent.<span style="color: #006600;">IO_ERROR</span>, loaderErrorHandler<span style="color: #66cc66;">&#41;</span>;
				updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Unregisters all the currently registered loaders.
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> unregisterAll<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// Use a copy of the loaders array because the original loaders array will be</span>
			<span style="color: #808080; font-style: italic;">// manipulated as we loop through removing loaders.</span>
			<span style="color: #000000; font-weight: bold;">var</span> loaders:<span style="color: #0066CC;">Array</span> = loaders.<span style="color: #0066CC;">slice</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">for</span> <span style="color: #b1b100;">each</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> loader:IEventDispatcher <span style="color: #b1b100;">in</span> loaders<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				unregister<span style="color: #66cc66;">&#40;</span>loader<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Updates stats when progress events are dispatched.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> loaderProgressHandler<span style="color: #66cc66;">&#40;</span>event:ProgressEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Updates stats when complete events are dispatched.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> loaderCompleteHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Updates stats when error events are dispatched.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> loaderErrorHandler<span style="color: #66cc66;">&#40;</span>event:IOErrorEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// Because the loader will never reach a complete state because of the error,</span>
			<span style="color: #808080; font-style: italic;">// we'll unregister the loader now.</span>
			unregister<span style="color: #66cc66;">&#40;</span>IEventDispatcher<span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Whether stats are flagged to be updated.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> statsNeedUpdating:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Marks that we need to update stats.  We delay the actual updating of the stats
		 * until the next frame as a type of invalidation/validation cycle like the Flex components
		 * go through.  This is to avoid duplicate calls to the stat updating logic within a
		 * single render.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> updateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span>statsNeedUpdating<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				statsNeedUpdating = <span style="color: #000000; font-weight: bold;">true</span>;
				setTimeout<span style="color: #66cc66;">&#40;</span>doUpdateStats, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Updates percentLoaded stats.  When there is a single loader, this is simply the bytes 
		 * loaded divided by the bytes total for the loader.  When there are multiple loaders, this 
		 * is the number of loaders which have completed their loading process divided by the total 
		 * number of registered loaders.  The reason we can't go off bytes when there are multiple
		 * loaders is because a loader's totalBytes is only populated once it has made its initial
		 * request to the server.  This means the third loader might  not make its initial request 
		 * until the first request has returned. This means we don't know our grand total number 
		 * of bytes at the beginning, which is imperative to have to make an accurate 
		 * bytesLoaded/bytesTotal calculation.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> doUpdateStats<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>statsNeedUpdating<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// See the asdoc for this function to understand why we have these different cases.</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">length</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					<span style="color: #000000; font-weight: bold;">var</span> loadersComplete:uint = <span style="color: #cc66cc;">0</span>;
&nbsp;
					<span style="color: #b1b100;">for</span> <span style="color: #b1b100;">each</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> loader:<span style="color: #0066CC;">Object</span> <span style="color: #b1b100;">in</span> loaders<span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#123;</span>
						<span style="color: #808080; font-style: italic;">// bytesTotal is only populated (greater than 0) once the loader has made </span>
						<span style="color: #808080; font-style: italic;">// its request to the server.</span>
						<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loader.<span style="color: #0066CC;">bytesTotal</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&amp;&amp;</span> loader.<span style="color: #0066CC;">bytesLoaded</span> == loader.<span style="color: #0066CC;">bytesTotal</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #66cc66;">&#123;</span>
							loadersComplete++;
						<span style="color: #66cc66;">&#125;</span>
					<span style="color: #66cc66;">&#125;</span>
&nbsp;
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">length</span> == <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#123;</span>
						percentLoaded = <span style="color: #cc66cc;">1</span>;
					<span style="color: #66cc66;">&#125;</span>
					<span style="color: #b1b100;">else</span>
					<span style="color: #66cc66;">&#123;</span>
						percentLoaded = loadersComplete <span style="color: #66cc66;">/</span> loaders.<span style="color: #0066CC;">length</span>;
					<span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders.<span style="color: #0066CC;">length</span> == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					<span style="color: #808080; font-style: italic;">// bytesTotal is only populated (greater than 0) once the loader has made </span>
					<span style="color: #808080; font-style: italic;">// its request to the server.</span>
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>loaders<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">bytesTotal</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
					<span style="color: #66cc66;">&#123;</span>
						percentLoaded = loaders<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">bytesLoaded</span> <span style="color: #66cc66;">/</span> loaders<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">bytesTotal</span>; 
					<span style="color: #66cc66;">&#125;</span>
					<span style="color: #b1b100;">else</span>
					<span style="color: #66cc66;">&#123;</span>
						percentLoaded = <span style="color: #cc66cc;">0</span>;
					<span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#125;</span>
				<span style="color: #b1b100;">else</span>
				<span style="color: #66cc66;">&#123;</span>
					percentLoaded = <span style="color: #cc66cc;">1</span>;
				<span style="color: #66cc66;">&#125;</span>
&nbsp;
				dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ProgressEvent<span style="color: #66cc66;">&#40;</span>ProgressEvent.<span style="color: #006600;">PROGRESS</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
				<span style="color: #808080; font-style: italic;">// If all the loaders we have registered have completed loading, we'll</span>
				<span style="color: #808080; font-style: italic;">// unregister all of them and dispatch a complete event.</span>
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>percentLoaded == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
				<span style="color: #66cc66;">&#123;</span>
					unregisterAll<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
					dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
				<span style="color: #66cc66;">&#125;</span>
&nbsp;
				<span style="color: #808080; font-style: italic;">// Reset the flag.</span>
				statsNeedUpdating = <span style="color: #000000; font-weight: bold;">false</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://aaronhardy.com/flex/showing-progress-for-multiple-loaders/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

