<?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/"
	>

<channel>
	<title>blog.log2e.com &#187; FlashDevelop</title>
	<atom:link href="http://blog.log2e.com/category/flashdevelop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.log2e.com</link>
	<description>Tutorials and Code Snippets</description>
	<lastBuildDate>Mon, 01 Jun 2009 13:05:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Handling FlashVars in PureMVC</title>
		<link>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/</link>
		<comments>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:09:59 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[FlashVars]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=36</guid>
		<description><![CDATA[In this blog entry I would like to share my approach to handling FlashVars in a PureMVC application. I assume that you are familiar with the basic concepts of PureMVC. A Real-World Scenario Recently, I developd a PureMVC-based Flash game for a client. The application had to be multi-lingual and had to provide an auto-login [...]]]></description>
			<content:encoded><![CDATA[<p>In this blog entry I would like to share my approach to handling FlashVars in a PureMVC application. I assume that you are familiar with the basic concepts of PureMVC.</p>
<p><span id="more-36"></span></p>
<h3>A Real-World Scenario</h3>
<p>Recently, I developd a PureMVC-based Flash game for a client. The application had to be multi-lingual and had to provide an auto-login option. After registration via an HTML form, the user is redirected to the page with the embedded SWF file. The locale information and the credentials are handed over to the game page as GET variables (with the password encrypted). A PHP script then generates the appropriate JavaScript code for <a title="SWFObject" href="http://code.google.com/p/swfobject/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/swfobject/?referer=');">SWFObject</a>:</p>
<div class="geshi php">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> flashvars <span class="sy0">=</span> <span class="br0">&#123;</span> locale<span class="sy0">:</span> <span class="st0">&quot;&lt;?=$locale?&gt;&quot;</span><span class="sy0">,</span> username<span class="sy0">:</span><span class="st0">&quot;&lt;?=$username?&gt;&quot;</span><span class="sy0">,</span> password<span class="sy0">:</span><span class="st0">&quot;&lt;?=$password?&gt;&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> params <span class="sy0">=</span> <span class="br0">&#123;</span> bgcolor<span class="sy0">:</span> <span class="st0">&quot;#000000&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> attributes <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; swfobject<span class="sy0">.</span>embedSWF<span class="br0">&#40;</span><span class="st0">&quot;Main.swf&quot;</span><span class="sy0">,</span> <span class="st0">&quot;FlashDiv&quot;</span><span class="sy0">,</span> <span class="st0">&quot;800&quot;</span><span class="sy0">,</span> <span class="st0">&quot;600&quot;</span><span class="sy0">,</span> <span class="st0">&quot;9.0.0&quot;</span><span class="sy0">,</span> <span class="st0">&quot;assets/swfobject/expressInstall.swf&quot;</span><span class="sy0">,</span> flashvars<span class="sy0">,</span> params<span class="sy0">,</span> attributes<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;/script&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
</ol>
</div>
<p>With the help of SWFObject the parameters are injected into the Flash file.</p>
<h3>The Document Class</h3>
<p>The Flash <em>Main.as</em> document class isn&#8217;t much different from a usual PureMVC document class except for extracting the <code>flashVars</code> object from the <code>root.loaderInfo</code> object&#8217;s <code>parameters</code> property and passing it to the <code>ApplicationFacade</code>&#8216;s <code>startup()</code> method as the second parameter:</p>
<p><em>Main.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">LoaderInfo</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#91;</span>SWF<span class="br0">&#40;</span><span class="kw3">width</span>=<span class="st0">&quot;800&quot;</span>, <span class="kw3">height</span>=<span class="st0">&quot;600&quot;</span>, frameRate=<span class="st0">&quot;30&quot;</span>, <span class="kw3">backgroundColor</span>=<span class="st0">&quot;#FFFFFF&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> flashVars:<span class="kw3">Object</span> = LoaderInfo<span class="br0">&#40;</span> <span class="kw3">this</span>.<span class="me1">root</span>.<span class="me1">loaderInfo</span> <span class="br0">&#41;</span>.<span class="me1">parameters</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> facade:ApplicationFacade = ApplicationFacade.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">startup</span><span class="br0">&#40;</span> <span class="kw3">stage</span>, flashVars <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The <em>ApplicationFacade</em></h3>
<p>Now, what to do with the <code>flashVars</code> inside the <em>ApplicationFacade</em>? I prefer using multiple fine-granulated proxy classes for managing different portions of my application&#8217;s data model. Therefore I created two proxies, one for holding the locale information, the other one for keeping track of the login parameters. Both proxies are registered by PureMVC commands that are invoked inside the <code>startup()</code> method.</p>
<p>To get the big picture first, let&#8217;s take a look at the <em>ApplicationFacade</em> class before exploring the proxies and commands:</p>
<p><em>ApplicationFacade.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">facade</span>.<span class="me1">Facade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> ApplicationFacade <span class="kw3">extends</span> Facade <span class="kw3">implements</span> IFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const INIT_LOCALE_PROXY:<span class="kw3">String</span> = <span class="st0">&quot;initLocaleProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const INIT_LOGIN_PROXY:<span class="kw3">String</span> = <span class="st0">&quot;initLoginProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STARTUP:<span class="kw3">String</span> = <span class="st0">&quot;startup&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>: ApplicationFacade </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>instance == <span class="kw2">null</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance = <span class="kw2">new</span> ApplicationFacade<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> instance as ApplicationFacade;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override protected <span class="kw2">function</span> initializeController<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span>.<span class="me1">initializeController</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">INIT_LOCALE_PROXY</span>, InitLocaleProxyCommand <span class="br0">&#41;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">INIT_LOGIN_PROXY</span>, InitLoginProxyCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STARTUP</span>, StartupCommand <span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> startup<span class="br0">&#40;</span> <span class="kw3">stage</span>:<span class="kw3">Object</span>, flashVars:<span class="kw3">Object</span> <span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> locale:<span class="kw3">String</span> = <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> flashVars.<span class="me1">locale</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; locale = flashVars.<span class="me1">locale</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loginVO:LoginVO = <span class="kw2">new</span> LoginVO<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> flashVars.<span class="me1">username</span> <span class="sy0">&amp;&amp;</span> flashVars.<span class="kw3">password</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginVO.<span class="me1">username</span> = flashVars.<span class="me1">username</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginVO.<span class="kw3">password</span> = flashVars.<span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> INIT_LOCALE_PROXY, locale <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> INIT_LOGIN_PROXY, loginVO <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> STARTUP, <span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 27-28</strong>: The <code>InitLocaleProxyCommand</code> and the <code>InitLoginProxyCommand</code> are registered. These commands are responsible for populating the proxies. We will take a look at them shortly.</p>
<p><strong>Lines 34-38</strong>: So far we haven&#8217;t checked if the <code>flashVars</code> object&#8217;s <code>locale</code> property is set at all. If it is empty the <code>locale</code> variable  holds an empty string.</p>
<p><strong>Line 40</strong>: <em>LoginVO</em> is a value object class that is used as the inner data structure of the <em>LoginProxy</em>. We will take a closer look at this helper class, too.</p>
<p><strong>Lines 41-45</strong>: Similar to checking the <code>flashVars</code> object&#8217;s <code>locale</code> property, we examine the <code>username</code> and <code>password</code> properties.</p>
<p><strong>Lines 47-48</strong>: The <code>InitLocaleProxyCommand</code> and the <code>InitLoginProxyCommand</code> are triggered by sending the notifications they were registered with.</p>
<p><strong>Line 49</strong>: The application flow is continued with the usual PureMVC <code>StartupCommand</code> that takes care of registering the stage mediator, etc.</p>
<h3>The Proxy Classes</h3>
<p>In order to understand what the commands do with their payload, we need to look at the proxy classes first. The <em>LocaleProxy</em>&#8216;s data object is a string that simply contains the locale (e.g. &#8220;en_GB&#8221;):</p>
<p><em>LocaleProxy.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LocaleProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;LocaleProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LocaleProxy<span class="br0">&#40;</span> <span class="kw3">name</span>:<span class="kw3">String</span>, <span class="kw3">data</span>:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span>, <span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> locale<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The <em>LoginProxy</em> class is a little more complex. Not only is the inner data structure defined by a value object class (<em>LoginVO</em>), the proxy also provides a getter method that inspects the data object in order to decide if the application should try an auto-login.</p>
<p><em>LoginProxy.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LoginProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;LoginProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LoginProxy<span class="br0">&#40;</span> <span class="kw3">name</span>:<span class="kw3">String</span>, <span class="kw3">data</span>:LoginVO=<span class="kw2">null</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span>, <span class="kw3">data</span> ? <span class="kw3">data</span> : <span class="kw2">new</span> LoginVO<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> tryAutoLogin<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="br0">&#40;</span> loginVO.<span class="me1">username</span> <span class="sy0">!</span>= <span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span> loginVO.<span class="kw3">password</span> <span class="sy0">!</span>= <span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> loginVO<span class="br0">&#40;</span><span class="br0">&#41;</span>:LoginVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as LoginVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 16-18</strong>: If the credentials have been passed to Flash via SWFObject the application is supposed to try an auto-login. If <code>tryAutoLogin</code> is <code>false</code> the user will be redirected to a login view inside the Flash movie.</p>
<p>The <em>LoginVO</em> class contains setter and getter methods for <code>username</code> and <code>password</code>.</p>
<p><em>LoginVO.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">registerClassAlias</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LoginVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _username:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _password:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LoginVO<span class="br0">&#40;</span> username:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span>, <span class="kw3">password</span>:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_username = username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_password = <span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> username<span class="br0">&#40;</span> username:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_username = username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> username<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> <span class="kw3">password</span><span class="br0">&#40;</span> <span class="kw3">password</span>:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_password = <span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">password</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _password;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">static</span> <span class="kw3">public</span> <span class="kw2">function</span> register<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerClassAlias<span class="br0">&#40;</span> <span class="st0">&quot;com.log2e.app.model.vo.LoginVO&quot;</span>, LoginVO <span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 36-39</strong>: The static method <code>register()</code> is supposed to be used in an AMF remoting environment. Since this post describes a pure AS3 approach we can&#8217;t rely on the <code>RemoteClass</code> meta tag which is only available in Flex. (Maybe I will blog on PureMVC and AMFPHP in another post.)</p>
<h3>The Commands</h3>
<p>Finally, here are the commands that process the FlashVars information and register the proxies.</p>
<p><em>InitLocaleProxyCommand.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">LocaleProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> InitLocaleProxyCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> locale:<span class="kw3">String</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span> <span class="br0">&#40;</span> locale <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;de_DE&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;en_GB&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;en_US&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;es_ES&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;fr_FR&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;it_IT&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;locale = <span class="st0">&#39;en_GB&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> LocaleProxy<span class="br0">&#40;</span> LocaleProxy.<span class="kw3">NAME</span>, locale <span class="br0">&#41;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 15-27</strong>: The locale is checked against a list of valid locales. If no valid value is found a default value is set.</p>
<p>There&#8217;s nothing special about the <code>InitLoginProxyCommand</code>, I post it here just for the sake of completeness:</p>
<p><em>InitLoginProxyCommand.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">LoginProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> InitLoginProxyCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loginVO:LoginVO = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as LoginVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> LoginProxy<span class="br0">&#40;</span> LoginProxy.<span class="kw3">NAME</span>, loginVO <span class="br0">&#41;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>After the <code>LocaleProxy</code> and the <code>LoginProxy</code> have been registered the <code>StartupCommand</code> (which I do not post here) takes control over the application flow by registering the <code>StageMediator</code> and so on.</p>
<p>I hope you found this post useful. Do share your thoughts and comments. Thanks for your time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Introduction</title>
		<link>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/</link>
		<comments>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/#comments</comments>
		<pubDate>Mon, 19 May 2008 09:27:56 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=29</guid>
		<description><![CDATA[This three-parts tutorial reflects my own learning experience with the PureMVC framework and the PureMVC Startup Manager. It was inspired by Philip Sexton&#8217;s demo Startup as Ordered and is my first attempt on PureMVC. The tutorial&#8217;s goal is to provide beneficial information to other novice PureMVC users who have understood the theory but lack practice. [...]]]></description>
			<content:encoded><![CDATA[<p>This three-parts tutorial reflects my own learning experience with the <a title="PureMVC" onclick="pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://www.puremvc.org/" target="_blank">PureMVC framework</a> and the <a title="PureMVC Startup Manager" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');" href="http://trac.puremvc.org/Utility_AS3_StartupManager" target="_blank">PureMVC Startup Manager</a>. It was inspired by Philip Sexton&#8217;s demo <a title="Startup as Ordered" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank">Startup as Ordered</a> and is my first attempt on PureMVC. The tutorial&#8217;s goal is to provide beneficial information to other novice PureMVC users who have understood the theory but lack practice.<br />
<span id="more-29"></span><br />
Here&#8217;s a short overview of the tutorial&#8217;s content:</p>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">Part 1</a></p>
<ol>
<li>Preparing the Project Space</li>
<li>The Resource Files: styles.css and data.xml</li>
</ol>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">Part 2</a></p>
<ol>
<li>The StartupMonitorProxy</li>
<li>The StartupResourceProxy</li>
<li>&#8220;Loaded&#8221; and &#8220;Failed&#8221; Notifications</li>
<li>Updating the Project Space</li>
<li>The ApplicationFacade</li>
<li>The StartupCommand</li>
<li>The Resource Proxies</li>
</ol>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 3" href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/" target="_self">Part 3</a></p>
<ol>
<li>Preparing the View</li>
<li>The StageMediator</li>
<li>Testing the Demo</li>
<li>Conclusion</li>
</ol>
<p>I closed the comments sections of the three tutorial parts. If you want to discuss the tutorial please add your comments to this introductory post. You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). </p>
<p>And now <a title="Getting Started with the PureMVC Startup Manager - Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">let&#8217;s get started&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 3</title>
		<link>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/</link>
		<comments>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/#comments</comments>
		<pubDate>Mon, 19 May 2008 08:20:58 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=25</guid>
		<description><![CDATA[Preparing the View We are almost there. In the final step of this tutorial we will be creating a very simple view: Create a file with the name StageMediator.as in the view folder. Create a new folder inside the view folder and call it components. Create two files in the components folder and name them [...]]]></description>
			<content:encoded><![CDATA[<h3>Preparing the View</h3>
<p>We are almost there. In the final step of this tutorial we will be creating a very simple view:</p>
<ol>
<li>Create a file with the name <em>StageMediator.as</em> in the <em>view</em> folder.</li>
<li>Create a new folder inside the <em>view</em> folder and call it <em>components</em>.</li>
<li>Create two files in the <em>components</em> folder and name them <em>SectionView.as</em> and <em>TitleView.as</em>.</li>
</ol>
<p><span id="more-25"></span><br />
Here&#8217;s an updated screenshot of the project panel:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_3.gif" alt="Project Panel" width="426" height="481" /></p>
<p>Both view components are not PureMVC-specific. Their only purpose is to display the CSS-formatted content from the XML file. The code of the view components is shown here without any comments.</p>
<p><em>TitleView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">TextFieldAutoSize</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> TitleView <span class="kw3">extends</span> Sprite </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _title:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _css:StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _titleTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> TitleView<span class="br0">&#40;</span> title:<span class="kw3">String</span>, css:StyleSheet <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_title = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_css = css; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">y</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;title&quot;&gt;&#39;</span> + _title + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _titleTextField <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><em>SectionView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">TextFieldAutoSize</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SectionView <span class="kw3">extends</span> Sprite </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _sectionVO:SectionVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _css:StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _labelTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _contentTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SectionView<span class="br0">&#40;</span> sectionVO:SectionVO, css:StyleSheet <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_sectionVO = sectionVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_css = css; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">y</span> = <span class="nu0">60</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;label&quot;&gt;&#39;</span> + _sectionVO.<span class="me1">label</span> + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">y</span> = <span class="nu0">90</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">wordWrap</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">multiline</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">htmlText</span> = _sectionVO.<span class="me1">content</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _labelTextField <span class="br0">&#41;</span>; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _contentTextField <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The <em>StageMediator</em></h3>
<p>An instance of the <em>StageMediator</em> class has already been created and registered with the application inside the <em>StartupCommand</em> (<a title="Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">see part 2</a>):</p>
<div class="geshi actionscript">
<ol start="19">
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
</ol>
</div>
<p>The role of the <em>StageMediator</em> is to initialize the view once all resources have been loaded successfully. In a real-world project you would probably want to display some state information on the loading progress before creating the main view. To simplify things, we will be sending this information to the output panel using <code>trace()</code>. </p>
<p>In our sample project the <em>StageMediator</em> not only declares an interest in the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications for each resource, it also listens to various other notifications that are automatically sent by the monitor. </p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">TitleView</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IMediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">mediator</span>.<span class="me1">Mediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">SectionView</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StageMediator <span class="kw3">extends</span> Mediator <span class="kw3">implements</span> IMediator </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;StageMediator&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _styleSheetProxy:StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _siteDataProxy:SiteDataProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StageMediator<span class="br0">&#40;</span> viewComponent:<span class="kw3">Object</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span>, viewComponent <span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> listNotificationInterests<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> &nbsp;<span class="br0">&#91;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCE_TIMED_OUT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> handleNotification<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span> <span class="br0">&#40;</span> note.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading StyleSheet&#8230;&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;StyleSheet Loaded&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Site Data&#8230;&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Site Data Loaded&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Abnormal State, Abort&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> perc:<span class="kw3">Number</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Number</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Progress: &quot;</span> + perc + <span class="st0">&quot;%&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;&gt;&gt;&gt; Loading Complete&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;initializeView<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Finished Incomplete&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> initializeView<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_styleSheetProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StyleSheetProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_siteDataProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> SiteDataProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as SiteDataProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> titleView:TitleView = <span class="kw2">new</span> TitleView<span class="br0">&#40;</span> _siteDataProxy.<span class="me1">title</span>, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> titleView <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionVO:SectionVO = _siteDataProxy.<span class="me1">sections</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionView:SectionView = <span class="kw2">new</span> SectionView<span class="br0">&#40;</span> sectionVO, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> sectionView <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">stage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Stage</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> viewComponent as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 29-34</strong>: These notifications are generated by the monitor. For more details please refer to the <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/?p=25&#038;preview=true');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">StartupMonitorProxy API documentation</a>.</p>
<p><strong>Lines 35-40</strong>: These notifications are generated inside the resource proxies.</p>
<p><strong>Line 71</strong>: The main view is only initialized if all resources have been loaded. </p>
<p>And, finally, here&#8217;s the class that starts it all (<em>Main.as</em>):</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> facade:ApplicationFacade = ApplicationFacade.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">startup</span><span class="br0">&#40;</span> <span class="kw3">this</span>.<span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Testing the Demo</h3>
<p>If you run our sample app, you should see three textfields that display the content from the XML file, all nicely formatted:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_demo_screenshot.gif" alt="Project Panel" width="441" height="363" /></p>
<p>The output panel should display the following lines (don&#8217;t be confused by the fact that the &#8220;Site Data Loaded&#8221; message is spit out after the &#8220;>>> Loading Complete&#8221; message):<br />
<code><br />
Loading StyleSheet...<br />
Loading Progress: 50%<br />
Loading Site Data...<br />
StyleSheet Loaded<br />
Loading Progress: 100%<br />
>>> Loading Complete<br />
Site Data Loaded<br />
</code></p>
<p>Now, in order to test that the Startup Manager is working properly, you can, for example, rename one of the resource files (<em>styles.css</em>, <em>data.xml</em>). In either case the utility should display a &#8220;Loading Finished Incomplete&#8221; message.</p>
<h3>Conclusion</h3>
<p>I hope this three-parts tutorial helped you to use the PureMVC Startup Manager in your own PureMVC projects. This utility is an excellent addition to the PureMVC framework, it&#8217;s very flexible and can greatly support you to organize the loading of resources and to correctly handle errors that might occur during startup.</p>
<hr />
<em>You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 2</title>
		<link>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/</link>
		<comments>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:27:47 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=22</guid>
		<description><![CDATA[The StartupMonitorProxy A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (see part 1). The important thing here is to make sure that everything gets loaded in [...]]]></description>
			<content:encoded><![CDATA[<h3>The <em>StartupMonitorProxy</em></h3>
<p>A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (<a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">see part 1</a>). The important thing here is to make sure that everything gets loaded in the proper order and is fully loaded before it is accessed. Here is where the <code>StartupMonitorProxy</code> steps in. This class is at the core of the Startup Manager utility.<br />
<span id="more-22"></span><br />
The <code>StartupMonitorProxy</code> takes care of how the resource loading should be sequenced so that dependent resources are loaded in correct order. It also keeps track of the progress of the resource loading, and it knows when the resource loading is complete. The way you use the <code>StartupMonitorProxy</code> is pretty straightforward:</p>
<ol>
<li>A single instance of the <code>StartupMonitorProxy</code> is registered which is usually referred to as the monitor.</li>
<li>Each startup resource is registered with the monitor, using the <code>addResource()</code> method.</li>
<li>The loading process is started by calling the monitor&#8217;s <code>loadResources()</code> method.</li>
</ol>
<p>(For a more detailed description please refer to the excellent <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">API documentation</a>.)</p>
<p>Now let&#8217;s take a quick look at the other actors that are needed to make the startup utility work.</p>
<h3>The <em>StartupResourceProxy</em></h3>
<p>For each startup resource the application must instantiate a <code>StartupResourceProxy</code> object. These objects are required only by the utility and must not be confused with the normal resource proxies that represent the data carrier objects of the model. The regular proxies are instantiated and registered with the application first. After that the <code>StartupResourceProxy</code> objects are instantiated, receiving the resource proxy instance and a separate startup resource name. The two proxy types are like twins, but they live in different worlds. We will shortly see what this looks like in code.</p>
<h3>&#8220;Loaded&#8221; and &#8220;Failed&#8221; Notifications</h3>
<p>In order to inform the monitor that a resource has been loaded successfully or that the resource load has failed, the application must register the utility commands <code>StartupResourceLoadedCommand</code> and <code>StartupResourceFailedCommand</code>. These commands are responsible for sending &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications to the monitor whereby the notification body identifies the particular resource.</p>
<h3>Updating the Project Space</h3>
<p>Before we continue with the actual ActionScript code, let&#8217;s create some more class files in our project space. </p>
<ol>
<li>Create a file with the name <em>StartupCommand.as</em> in the <em>controller</em> folder.</li>
<li>Create three new files in the <em>model</em> folder and name them <em>EntityProxy.as</em>, <em>SiteDataProxy.as</em>, <em>StyleSheetProxy.as</em>.</li>
<li>Create a new folder <em>vo</em> under the <em>model</em> folder.</li>
<li>Create a file with the name <em>SectionVO</em> in the <em>vo</em> folder.</li>
</ol>
<p>Your project panel should look like this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_2.gif" alt="Project Space" width="426" height="433" /></p>
<h3>The <em>ApplicationFacade</em></h3>
<p>We are starting with the <em>ApplicationFacade</em> class (if you followed <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">part 1</a> of this tutorial you can paste the code below into the already existing empty <em>ApplicationFacade.as</em> file). It pretty much looks like a typical PureMVC facade:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">facade</span>.<span class="me1">Facade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceLoadedCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceFailedCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">controller</span>.<span class="me1">StartupCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> ApplicationFacade <span class="kw3">extends</span> Facade <span class="kw3">implements</span> IFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STARTUP:<span class="kw3">String</span> = <span class="st0">&quot;startup&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetFailed&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataFailed&quot;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>: ApplicationFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>instance == <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance = <span class="kw2">new</span> ApplicationFacade<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> instance as ApplicationFacade;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override protected <span class="kw2">function</span> initializeController<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span>.<span class="me1">initializeController</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STARTUP, StartupCommand <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_FAILED, StartupResourceFailedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_FAILED, StartupResourceFailedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> startup<span class="br0">&#40;</span> <span class="kw3">stage</span>:<span class="kw3">Object</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> STARTUP, <span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 12-17</strong>: Three notification names are defined for each of both resources, the stylesheet (<code>STYLE_SHEET_LOADING</code>, <code>STYLE_SHEET_LOADED</code>, <code>STYLE_SHEET_FAILED</code>) and the site data (<code>SITE_DATA_LOADING</code>, <code>SITE_DATA_LOADED</code>, <code>SITE_DATA_FAILED</code>). Please note that the <code>..._LOADING</code> notifications are not necessarily required by the Startup Manager utility, they are just sent as additional information, using the regular PureMVC <code>sendNotification()</code> method every time a load attempt is made.</p>
<p><strong>Lines 33-37</strong>: The before mentioned utility commands are registered. It&#8217;s important that the commands are registered separately with the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notification names for every single startup resource.</p>
<h3>The <em>StartupCommand</em></h3>
<p>The <em>StartupCommand</em> is the place where we define the proxies and instantiate the <em>StartupMonitorProxy</em> object:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">controller</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">StageMediator</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StartupCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _monitor:StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> StartupMonitorProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StartupMonitorProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">defaultTimeout</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> styleSheetProxy:IStartupProxy = <span class="kw2">new</span> StyleSheetProxy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> siteDataProxy:IStartupProxy = <span class="kw2">new</span> SiteDataProxy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> siteDataProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rStyleSheetProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> StyleSheetProxy.<span class="me1">SRNAME</span>, styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rSiteDataProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> SiteDataProxy.<span class="me1">SRNAME</span>, siteDataProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rSiteDataProxy.<span class="me1">requires</span> = <span class="br0">&#91;</span> rStyleSheetProxy <span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">loadResources</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> makeAndRegisterStartupResource<span class="br0">&#40;</span> proxyName:<span class="kw3">String</span>, appResourceProxy:IStartupProxy <span class="br0">&#41;</span>:StartupResourceProxy </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> r:StartupResourceProxy = <span class="kw2">new</span> StartupResourceProxy<span class="br0">&#40;</span> proxyName, appResourceProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">addResource</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> r;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 23-24</strong>: An instance of the <code>StartupMonitorProxy</code> class is created and registered with the application. The proxy is assigned to the private property <code>_monitor</code>.</p>
<p><strong>Line 25</strong>: A default timeout is set. You can set individual timeout values for each startup resource. If you do not set timeouts on the resource level the monitor&#8217;s default timeout is used. (For more information on the use of timeouts take a look at the <a title="StartupResourceProxy API" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">StartupResourceProxy API documentation</a>.)</p>
<p><strong>Lines 27-28</strong>: The proxies for the stylesheet and the site data are instantiated. Please note that they are typed as <code>IStartupProxy</code> because the proxies are supposed to implement the <code>IStartupProxy</code> interface in addition to the usual PureMVC <code>IProxy</code> interface. We will return to this topic when we look at the implementation of the proxies.</p>
<p><strong>Lines 30-31</strong>: Like any other PureMVC proxy the <code>styleSheetProxy</code> and the <code>siteDataProxy</code> are registered with the application.</p>
<p><strong>Lines 33-34</strong>: Whereas instances of the <code>StyleSheetProxy</code> and the <code>SiteDataProxy</code> are supposed to be used throughout the whole application, the <code>rStyleSheetProxy</code> and the <code>rSiteDataProxy</code> objects are only needed in the context of the startup utility. </p>
<p><strong>Line 36</strong>: The dependency between the two resources is specified. The site data requires that the stylesheet must be loaded first.</p>
<p><strong>Line 38</strong>: Calling <code>loadResources()</code> on the monitor instance triggers the loading of all startup resources.</p>
<p><strong>Lines 41-47</strong>: This is a helper function that I borrowed from the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo. It creates and registers a <code>StartupResourceProxy</code> object and adds it to the monitor&#8217;s list of resources. </p>
<h3>The Resource Proxies</h3>
<p>Generally speaking, a proxy in a PureMVC-based application manages a piece of the data model. The same proxy might also be responsible for retrieving its data from a remote location during startup. The PureMVC Startup Manager utility supports this pattern by providing the <code>IStartupProxy</code> interface which strictly requires the implementation of a <code>load()</code> method. Any resource proxy that is part of the initial loading process monitored by the utility must implement this interface.</p>
<p>On the other hand, the proxies must work in the usual PureMVC environment where they are supposed to extend the framework&#8217;s <code>Proxy</code> class and to implement the <code>IProxy</code> interface. To make the resource proxies work in both contexts, the utitliy author uses an abstract class that facilitates the cooperation between the Startup Manager and the application. You can find this class in the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo, the class name is <em>EntityProxy</em>. It extends <code>Proxy</code> and implements <code>IProxy</code> like a normal PureMVC proxy. But this proxy class isn&#8217;t instantiated and registered with the application itself, it only serves as a helper class for the actual resource proxies. The resource proxies extend <code>EntityProxy</code> and implement <code>IStartupProxy</code>. This way they become part of both contexts.</p>
<p>Here&#8217;s the code of the <em>EntityProxy</em> class:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> EntityProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> EntityProxy<span class="br0">&#40;</span> <span class="kw3">name</span> :<span class="kw3">String</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; protected <span class="kw2">function</span> sendLoadedNotification<span class="br0">&#40;</span> noteName:<span class="kw3">String</span>, noteBody:<span class="kw3">String</span>, srName:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> srProxy:StartupResourceProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> srName <span class="br0">&#41;</span> as StartupResourceProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span> srProxy.<span class="me1">isTimedOut</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendNotification<span class="br0">&#40;</span> noteName, noteBody <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 15-22</strong>: The <code>sendLoadedNotification()</code> method is a helper function that is used by the actual resource proxies to send &#8220;Loaded&#8221; or &#8220;Failed&#8221; notifications. These notifications are only sent if the Startup Manager hasn&#8217;t timed out the resource. In order to get the timeout information, the resource proxy&#8217;s &#8220;twin object&#8221; (<code>srProxy</code>) is retrieved. By the way, accessing this state information is the only reason why the <code>StartupResourceProxy</code> objects have been registered with the application in the <em>StartupCommand</em> class (see above, line 44: <code>facade.registerProxy( r );</code>). The utility itself does not require that they are registered with the PureMVC model.</p>
<p>The resource proxies finally implement the actual loading mechanisms. I hope you remember that the proxies in our sample project are responsible for loading an external CSS stylesheet and an XML file. Here&#8217;s the code of the two proxies. </p>
<p><em>StyleSheetProxy</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StyleSheetProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;StyleSheetProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;StyleSheetSRProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StyleSheetProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span> :<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;styles.css&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> loaderCompleteHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span> = <span class="kw2">new</span> StyleSheet<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="kw3">parseCSS</span><span class="br0">&#40;</span> URLLoader<span class="br0">&#40;</span>event.<span class="kw3">target</span><span class="br0">&#41;</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> css<span class="br0">&#40;</span><span class="br0">&#41;</span>:StyleSheet</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Line 16</strong>: The <code>SRNAME</code> constant holds the name of the <code>StartupResourceProxy</code> twin.</p>
<p><strong>Line 40, line 45</strong>: The helper method in the parent <code>EntityProxy</code> class is called to send &#8220;Loaded&#8221;/&#8221;Failed&#8221; notifications.</p>
<p><strong>Lines 48-51</strong>: The getter method returns the internal <code>data</code> property as a typed <code>StyleSheet</code> object.</p>
<p>The <em>SiteDataProxy</em> class works in a similar fashion:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;iimport com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SiteDataProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;SiteDataProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;SiteDataSRProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SiteDataProxy<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span> :<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;data.xml&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> loaderCompleteHandler<span class="br0">&#40;</span>event:Event<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">xml</span>:<span class="kw3">XML</span> = <span class="kw2">new</span> <span class="kw3">XML</span><span class="br0">&#40;</span> event.<span class="kw3">target</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">xml</span>.<span class="me1">ignoreWhitespace</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> title:<span class="kw3">String</span> = <span class="kw3">xml</span>.<span class="me1">title</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toXMLString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sections:<span class="kw3">Array</span> = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionsXMLList:XMLList = <span class="kw3">xml</span>.<span class="me1">sections</span>.<span class="me1">section</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">for</span> <span class="br0">&#40;</span> <span class="kw2">var</span> i:uint=<span class="nu0">0</span>; i<span class="sy0">&lt;</span>sectionsXMLList.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++ <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> section:<span class="kw3">XML</span> = sectionsXMLList<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> id:uint = section.<span class="sy0">@</span>id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> sectionVO:SectionVO = <span class="kw2">new</span> SectionVO<span class="br0">&#40;</span> id, section.<span class="sy0">@</span>label, section.<span class="me1">content</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sections.<span class="kw3">push</span><span class="br0">&#40;</span> sectionVO <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span> = <span class="kw2">new</span> <span class="kw3">Object</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="me1">title</span> = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="me1">sections</span> = sections;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> title<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span>.<span class="me1">title</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> sections<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span>.<span class="me1">sections</span> as <span class="kw3">Array</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 38-51</strong>: Please refer to the <em>data.xml</em> file described in <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">part 1</a> of this tutorial.</p>
<p><strong>Line 49</strong>: The <em>SiteDataProxy</em> class makes use of a simple value object class (<em>SectionVO</em>):</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SectionVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _id:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _label:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _content:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SectionVO<span class="br0">&#40;</span> id:uint, label:<span class="kw3">String</span>, content:<span class="kw3">String</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_id = id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_label = label;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_content = content;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> id<span class="br0">&#40;</span><span class="br0">&#41;</span>:uint</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> label<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _label;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> content<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _content;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In the <a title="Part 3" href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/" target="_self">third and last part</a> of this tutorial we will be creating a rudimentary view to test our efforts.</p>
<hr />
<em>You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 1</title>
		<link>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/</link>
		<comments>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/#comments</comments>
		<pubDate>Fri, 16 May 2008 14:04:50 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[Cairngorm]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=19</guid>
		<description><![CDATA[Coming from a Flex/Cairngorm background, I&#8217;ve always missed a utility that takes care of the asynchronous loading of resources during application startup. Being too lazy to write one myself, I usually chain together several Cairngorm commands for loading configuration settings, stylesheets, language resources and initial data from a database. Each command is only executed if [...]]]></description>
			<content:encoded><![CDATA[<p>Coming from a Flex/Cairngorm background, I&#8217;ve always missed a utility that takes care of the asynchronous loading of resources during application startup. Being too lazy to write one myself, I usually chain together several Cairngorm commands for loading configuration settings, stylesheets, language resources and initial data from a database. Each command is only executed if the predecessor task has been finished successfully. The user interface isn&#8217;t initialized until the whole chain is completed, otherwise an error message is generated and the application won&#8217;t start. It&#8217;s not elegant but it works.</p>
<p>When I started to learn <a title="PureMVC" onclick="pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://www.puremvc.org/" target="_blank">PureMVC</a> (and I&#8217;m still learning), I was happy to discover that the AS3 version is accompanied by a <a title="PureMVC Startup Manager" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://trac.puremvc.org/Utility_AS3_StartupManager" target="_blank">Startup Manager</a>. This utility isn&#8217;t part of the core PureMVC framework and has to be downloaded and installed separately, but it nicely integrates with the &#8220;PureMVC way of things&#8221;.<br />
<span id="more-19"></span><br />
There&#8217;s a very well-documented sample project (<a title="Startup as Ordered" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19');" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank">Startup as Ordered</a>) from the author of the utility, Philip Sexton. After exploring the source code of this project, I thought I give it a try and set up my own little startup sequence. Philip&#8217;s sample just simulates the asynchronous loading with the help of another utility he wrote (<a title="Asynchronous Stub" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19');" href="http://trac.puremvc.org/Utility_AS3_AsyncStub" target="_blank">Asynchronous Stub</a>), so I decided to take a more real-world scenario where an external stylesheet and an XML file are loaded before the user interface is created. Once you have understood the basic setup, it&#8217;s no big deal to extend the startup sequence by, for example, making asynchronous calls to remote services.</p>
<h3>Preparing the Project Space</h3>
<p>Loading a stylesheet and some initial data is a common task in both Flash and Flex projects. So my approach in this tutorial is to set up a pure AS3 project that can easily be adjusted to work in both worlds. This also means that you can use whatever IDE you prefer for ActionScript coding. I&#8217;m using <a title="FlashDevelop" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://www.flashdevelop.org/" target="_blank">FlashDevelop</a> along with the Flex 3 SDK but the project space would look very similar in FlexBuilder.</p>
<p>If you haven&#8217;t already done so, download the <a title="PureMVC Download Page" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://trac.puremvc.org/PureMVC_AS3/wiki/Downloads" target="_blank">PureMVC framework</a> and the <a title="Startup Manager Download Page" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads" target="_blank">Startup Manager</a>. Make sure that both libraries are available to your project. Either copy the SWC files in your project space or add their locations to the classpath. On the top level, your project should contain the three folders <em>bin</em>, <em>lib</em> and <em>src</em>. For my purposes, I placed copies of the SWC files in the <em>lib</em> folder so that I can provide a working FlashDevelop project for download that includes all resources.</p>
<p>Choose a package name (I&#8217;m going to use <em>com.log2e.puremvcdemo</em>) and create the usual <em>model</em>, <em>view</em>, <em>controller</em> folders.  Also, in addtion to your document class (<em>Main.as</em>) create an empty file with the name <em>ApplicationFacade.as</em> in the <em>puremvcdemo</em> folder. You project panel should look similar to this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_1.gif" alt="Project Panel" width="426" height="292" /></p>
<h3>The Resource Files: <em>styles.css</em> and <em>data.xml</em></h3>
<p>Inside the <em>bin</em> folder create two text files with the names <em>styles.css</em> and <em>data.xml</em>. These are the resources that we will be loading during startup. The stylesheet is pretty simple:</p>
<div class="geshi no css">
<ol>
<li class="li1">
<div class="de1"><span class="re1">.title</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">16px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-weight<span class="re2">:bold</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">990000</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">.label</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">14px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-weight<span class="re2">:bold</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">999999</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">p <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">12px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">333333</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The XML file contains some sample content:</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span> <span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;site<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Welcome to the PureMVC Startup Manager Demo!<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;sections<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;section</span> <span class="re0">id</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">label</span>=<span class="st0">&quot;Home&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;content<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2">&lt;![CDATA[&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque consequat. Nam ut leo &lt;i&gt;vitae metus vehicula&lt;/i&gt; posuere. Nullam nunc. Vivamus nec ligula vel tortor molestie elementum. Integer faucibus elementum dolor. Nulla lorem. Quisque varius sodales mi. Nam tincidunt pede. Nam scelerisque nulla a nisl.&lt;/p&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2">&lt;p&gt;Vivamus nec ligula vel tortor molestie elementum. Nam ut leo vitae metus vehicula posuere. Nullam nunc. Vivamus nec ligula vel &lt;b&gt;tortor molestie elementum&lt;/b&gt;. Integer faucibus elementum dolor. Nulla lorem. Quisque varius sodales mi. Nam tincidunt pede. Nam scelerisque nulla a nisl. Quisque consequat.&lt;/p&gt;]]&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/content<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/section<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/sections<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/site<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Important note: Make sure that the HTML-coded content inside the CDATA block is only composed of HTML tags that can be interpreted by HTML-enabled textfields in Flash/Flex.</p>
<p>In the <a title="Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">next part</a> of this tutorial we will be taking a closer look at the inner working of the Startup Manager.</p>
<hr />
<em>You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Quick Tip &#8211; Where are my Easing Equations?</title>
		<link>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/</link>
		<comments>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/#comments</comments>
		<pubDate>Wed, 14 May 2008 08:52:21 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[TweenLite]]></category>
		<category><![CDATA[TweenMax]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=18</guid>
		<description><![CDATA[Tutorials on TweenLite or TweenMax often rely on the easing functions that come with the Flash CS3 IDE. These functions are contained in the package fl.motion.easing. All classes under the package name fl are specific to Flash CS3 and are not available in the free Flex 3 SDK. If you, for example, use FlashDevelop with [...]]]></description>
			<content:encoded><![CDATA[<p>Tutorials on <a title="TweenLite" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=18&amp;message=4');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://blog.greensock.com/tweenliteas3/" target="_blank">TweenLite</a> or <a title="TweenMax" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=18&amp;message=4');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://blog.greensock.com/tweenmaxas3/" target="_blank">TweenMax</a> often rely on the easing functions that come with the Flash CS3 IDE. These functions are contained in the package <em>fl.motion.easing</em>. All classes under the package name <em>fl</em> are specific to Flash CS3 and are not available in the free Flex 3 SDK. If you, for example, use FlashDevelop with the Flex 3 SDK you have to import your easing functions from the package <em>mx.effects.easing</em>. So any time you see an import statement like this</p>
<p><code>import fl.motion.easing.*;</code></p>
<p>you should be able to replace it with</p>
<p><code>import mx.effects.easing.*;</code></p>
<p>and get the same functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spinning Preloader &#8211; An All-Time Classic in Pure AS3</title>
		<link>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/</link>
		<comments>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/#comments</comments>
		<pubDate>Sat, 10 May 2008 14:56:48 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Preloader]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=14</guid>
		<description><![CDATA[Update (December 11th, 2008): The source code is available for download now. The zip archive also includes a FlashDevelop project file. Get it here. This tutorial may serve as a beginner exercise in AS3 coding. But before starting, let&#8217;s take a quick look at what we will be creating: 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_spinningpreloader_460041531"
			class="flashmovie"
			width="400"
			height="140">
	<param name="movie" value="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf"
			name="fm_spinningpreloader_460041531"
			width="400"
			height="140">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object> The [...]]]></description>
			<content:encoded><![CDATA[<p><em>Update (December 11th, 2008): The source code is available for download now. The zip archive also includes a FlashDevelop project file. <a href="http://blog.log2e.com/demos/spinning-preloader/SpinningPreloader.zip">Get it here</a>.</em></p>
<p>This tutorial may serve as a beginner exercise in AS3 coding. But before starting, let&#8217;s take a quick look at what we will be creating:</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_spinningpreloader_1594651169"
			class="flashmovie"
			width="400"
			height="140">
	<param name="movie" value="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://blog.log2e.com/wp-content/uploads/2008/05/spinningpreloader.swf"
			name="fm_spinningpreloader_1594651169"
			width="400"
			height="140">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>The spinning preloader animation is an all-time classic. Our implementation will be highly configurable. You will be able to set the number, size, color and fade-out duration of the rectangular segments, as well as the radius and the spinning speed.<br />
<span id="more-14"></span></p>
<h3>Prerequisites</h3>
<p>Since this is a pure AS3 project, you can choose whatever IDE you like. I use the open-source AS3 IDE <a title="FlashDevelop" href="http://www.flashdevelop.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=');">FlashDevelop</a> along with the free <a title="Flex 3 SDK" href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK" target="_blank" onclick="pageTracker._trackPageview('/outgoing/opensource.adobe.com/wiki/display/flexsdk/Flex+SDK?referer=');">Flex 3 SDK</a>. The only other thing we need is the AS3 animation kit <a title="TweenLite" href="http://blog.greensock.com/tweenliteas3/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=');">TweenLite</a>. This lightweight tweening engine is contained in a single class file. You can eiher copy and paste it into your project space, or you can store it somewhere else and add the path to your project&#8217;s classpaths settings.</p>
<p>I call the preloader class <em>SpinningPreloader</em> and use <em>com.log2e.utils</em> as package definition. So my FlashDevelop project panel looks like this:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/spinning_preloader_project_panel.gif" alt="Spinning Preloader Project Panel" width="427" height="224" /></p>
<h3>The <em>SpinningPreloader</em> Class</h3>
<p>Here&#8217;s the full class code (I will explain it below):</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">utils</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">DisplayObjectContainer</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">TimerEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="me1">Timer</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> gs.<span class="me1">TweenLite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SpinningPreloader <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> <span class="kw3">_target</span> <img src='http://blog.log2e.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> isplayObjectContainer;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _container:Sprite;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _centerX:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _centerY:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _radius:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _steps:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _rectWidth:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _rectHeight:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _color:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _count:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _timer:Timer;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _timerInterval:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _fadeOutDuration:<span class="kw3">Number</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> SpinningPreloader<span class="br0">&#40;</span> <span class="kw3">target</span> <img src='http://blog.log2e.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> isplayObjectContainer,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;centerX:uint = <span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;centerY:uint = <span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;radius:uint = <span class="nu0">15</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;steps:uint = <span class="nu0">24</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rectWidth:uint = <span class="nu0">4</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rectHeight:uint = <span class="nu0">2</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">color</span>:uint = 0x0000FF,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;timerInterval:uint = <span class="nu0">20</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fadeOutDuration:<span class="kw3">Number</span> = <span class="nu0">1.5</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span> = <span class="kw3">target</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_centerX = centerX;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_centerY = centerY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_radius = radius;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_steps = steps;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_rectWidth = rectWidth;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_rectHeight = rectHeight;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_color = <span class="kw3">color</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timerInterval = timerInterval;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_fadeOutDuration = fadeOutDuration;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">x</span> = _centerX;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">y</span> = _centerY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span>.<span class="me1">addChild</span><span class="br0">&#40;</span>_container<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_count = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer = <span class="kw2">new</span> Timer<span class="br0">&#40;</span>_timerInterval, <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="me1">addEventListener</span><span class="br0">&#40;</span>TimerEvent.<span class="me1">TIMER</span>, drawRectangle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_container<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TweenLite.<span class="me1">to</span><span class="br0">&#40;</span> _container, .<span class="nu0">5</span>, <span class="br0">&#123;</span> alpha:<span class="nu0">0</span>, onComplete:onContainerFadeOutComplete <span class="br0">&#125;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onContainerFadeOutComplete<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_timer.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">_target</span>.<span class="me1">removeChild</span><span class="br0">&#40;</span>_container<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onRectFadeOutComplete<span class="br0">&#40;</span>rect:Sprite<span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">removeChild</span><span class="br0">&#40;</span>rect<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> drawRectangle<span class="br0">&#40;</span><span class="kw3">e</span>:TimerEvent<span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rot:<span class="kw3">Number</span> = _count <span class="sy0">*</span> <span class="nu0">360</span> <span class="sy0">/</span> _steps;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rect:Sprite = filledRectangle<span class="br0">&#40;</span>_rectWidth, _rectHeight, _color<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">x</span> = _radius <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>rot <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">PI</span><span class="sy0">/</span><span class="nu0">180</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">y</span> = _radius <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>rot <span class="sy0">*</span> <span class="kw3">Math</span>.<span class="kw3">PI</span><span class="sy0">/</span><span class="nu0">180</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">rotation</span> = rot;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_container.<span class="me1">addChild</span><span class="br0">&#40;</span>rect<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_count++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TweenLite.<span class="me1">to</span><span class="br0">&#40;</span> rect, _fadeOutDuration, <span class="br0">&#123;</span> alpha:<span class="nu0">0</span>, onComplete:onRectFadeOutComplete, onCompleteParams:<span class="br0">&#91;</span>rect<span class="br0">&#93;</span> <span class="br0">&#125;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">e</span>.<span class="kw3">updateAfterEvent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_count == _steps<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _count = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> filledRectangle<span class="br0">&#40;</span><span class="kw3">width</span>:uint, <span class="kw3">height</span>:uint, <span class="kw3">color</span>:uint<span class="br0">&#41;</span>:Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rect:Sprite = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span><span class="kw3">color</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="me1">drawRect</span><span class="br0">&#40;</span>-<span class="kw3">width</span><span class="sy0">/</span><span class="nu0">2</span>, -<span class="kw3">height</span><span class="sy0">/</span><span class="nu0">2</span>, <span class="kw3">width</span>, <span class="kw3">height</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rect.<span class="me1">graphics</span>.<span class="kw3">endFill</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> rect;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The Constructor</h3>
<p>The constructor receives a list of parameters:</p>
<ul>
<li><strong>target</strong>: The display object you want to attach the preloader animation to. The type is <code>DisplayObjectContainer</code> so the target can be any object that inherits from this class (for example <code>Stage</code>, <code>MovieClip</code>, <code>Sprite</code>).</li>
<li><strong>centerX</strong>: The x position of the preloader&#8217;s center point.</li>
<li><strong>centerY</strong>: The y position of the preloader&#8217;s center point.</li>
<li><strong>radius</strong>: The radius of the preloader. Please note that this is not the outer radius of the resulting animation but the distance between the center point and the registration point of the rectangular segments.</li>
<li><strong>steps</strong>: The number of rectangles that are created in one full turn.</li>
<li><strong>rectWidth</strong>: The width of a single rectangular segment.</li>
<li><strong>rectHeight</strong>: The height of a single rectangular segment.</li>
<li><strong>color</strong>: The color of the rectangles.</li>
<li><strong>timerInterval</strong> (in ms): This parameter controls the speed of the rotation by setting the time interval after which a new rectangle is drawn.</li>
<li><strong>fadeOutInterval</strong> (in s): This parameter specifies the duration of the alpha tween that fades out it each segment.</li>
</ul>
<h3>The <em>start()</em> and <em>stop()</em> Methods</h3>
<p>These two methods are the only interface between the <em>SpinningPreloader</em> class and the outside world.</p>
<p>The <code>start()</code> method creates a container for the animation and positions it on the target display object. It also initializes the <code>_count</code> property and starts the timer which repeatedly calls the <code>drawRectangle()</code> method.</p>
<p>The <code>stop()</code> method fades out the container sprite. Once the alpha value is 0 the timer is stopped and the container is removed from the display list. If you prefer to remove the animation immediately just replace the line of code that starts the tween with the two lines from the <code>onContainerFadeOutComplete()</code> event handler method.</p>
<h3>The &#8220;Fading&#8221; Event Handlers</h3>
<p>The method <code>onContainerFadeOutComplete()</code> is called after the container&#8217;s alpha value has reached 0.</p>
<p>The method <code>onRectFadeOutComplete()</code> is called whenever a single rectangle has finished its life cycle. As soon as the rectangle&#8217;s alpha value is 0 it is removed from the display list. This way we limit the maximum number of rectangles that are child objects of the container sprite at the same time.</p>
<h3>Drawing the Rectangles</h3>
<p>The angle that defines the position of each rectangle is calculated with the help of a counter variable (<code>_count</code>) which is incremented each time a rectangle is drawn. If the counter value is equal to the number of steps <code>_count</code> is reset to zero. The result from 360 divided by the number of steps muliplied with <code>_count</code> gives us the angle in degrees. This value is stored in the local variable <code>rot</code>.</p>
<p>In order to calculate the exact x and y coordinates we need a little trigonometry.</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/spinning_preloader_math.gif" alt="Trigonometry " width="314" height="284" /></p>
<p>(Just on a side note, we use the three o&#8217;clock position as starting point because that&#8217;s where the 0 degree angle is situated in Flash.) The sine and cosine in the above diagram are calculated by <em>sin(A) = y/r</em> and <em>cos(A) = x/r</em>. This trigonometric relation is used in the <code>drawRectangle()</code> method:</p>
<p><code>rect.x = _radius * Math.cos(rot * Math.PI/180);</code><br />
<code>rect.y = _radius * Math.sin(rot * Math.PI/180);</code></p>
<p>Please note that the <code>Math.sin()</code> and <code>Math.cos()</code> functions expect the angle to be in radians, that&#8217;s why we have to multiply <code>rot</code> with <code>Math.PI/180</code>.</p>
<p>The rectangles themselves are created in the <code>filledRectangle()</code> method which receives the width, height and color as parameters. The sprite instance is returned to <code>drawRectangle()</code> where the x, y and rotation values are set and the rectangle is added to the display list. As soon as the rectangle is visible it starts to fade out. Invoking <code>e.updateAfterEvent()</code> causes the Flash Player to update the screen immediately after a rectangle has been added (instead of relying on the next scheduled screen update that is governed by the frame rate).</p>
<h3>Using the <em>SpinningPreloader</em> Class</h3>
<p>The animations shown on this page were created by instantiating three preloader objects with different parameters:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">utils</span>.<span class="me1">SpinningPreloader</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl1:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">50</span>, <span class="nu0">70</span>, <span class="nu0">15</span>, <span class="nu0">24</span>, <span class="nu0">4</span>, <span class="nu0">2</span>, 0x0000FF, <span class="nu0">20</span>, <span class="nu0">1.5</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl1.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl2:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">180</span>, <span class="nu0">70</span>, <span class="nu0">40</span>, <span class="nu0">48</span>, <span class="nu0">8</span>, <span class="nu0">3</span>, 0xFF0000, <span class="nu0">30</span>, <span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl2.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> pl3:SpinningPreloader = <span class="kw2">new</span> SpinningPreloader<span class="br0">&#40;</span><span class="kw3">this</span>, <span class="nu0">330</span>, <span class="nu0">70</span>, <span class="nu0">30</span>, <span class="nu0">32</span>, <span class="nu0">12</span>, <span class="nu0">4</span>, 0&#215;999999, <span class="nu0">15</span>, <span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pl3.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>Room for Improvement</h3>
<p>Where to go from here? There are several options for improving the class. For example, you could add a text field at the center of the preloader and an update function that receives the loading progress value. Or you could use a circle or a small bitmap instead of the rectangle. I will leave this as an exercise to you.</p>
<p>If you have any questions or suggestions leave a comment or drop me a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/10/spinning-preloader-in-pure-as3/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Creating a SWC Component in FlashDevelop</title>
		<link>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/</link>
		<comments>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/#comments</comments>
		<pubDate>Wed, 07 May 2008 12:19:45 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SWC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=6</guid>
		<description><![CDATA[In the past, if you wanted to create a SWC library from your ActionScript classes you either had to use FlexBuilder or the Flash IDE. After Adobe open-sourced the Flex SDK you were also able to use the command line tool compc.exe at no extra cost. But if you don&#8217;t like to mess around with [...]]]></description>
			<content:encoded><![CDATA[<p>In the past, if you wanted to create a SWC library from your ActionScript classes you either had to use FlexBuilder or the Flash IDE. After Adobe open-sourced the Flex SDK you were also able to use the command line tool <em>compc.exe</em> at no extra cost. But if you don&#8217;t like to mess around with command line tools you have another option now. A developer from Sydney released a SWC export plugin for the popular <span class="postbody">open-source ActionScript development environment </span><a title="FlashDevelop" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://www.flashdevelop.org" target="_blank">FlashDevelop</a>. The plugin is based on <em>compc.exe</em> but it hides all the ugly details from you.</p>
<p>This tutorial will guide you through the steps of creating a simple ActionScript component and compilling it into a SWC file.<br />
<span id="more-6"></span></p>
<h3>Installing the SWC Export Plugin</h3>
<p>The plugin installation is a piece of cake. Download the plugin <a title="Download ExportSWC.dll" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/community/viewtopic.php?t=2987_amp_start=0&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');" href="http://www.flashdevelop.org/community/viewtopic.php?t=2987&amp;start=0" target="_blank">from here</a>, unzip the <em>ExportSWC.dll</em> file and place it in FlashDevelop&#8217;s <em>Plugin</em> folder. (If you don&#8217;t know where to find this folder go to the &#8220;Tools&#8221; menu and click on &#8220;Application Files&#8230;&#8221;.) After restarting FlashDevelop you should see a new icon in the toolbar:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/export_swc_icon.gif" alt="ExportSWC Icon" width="260" height="40" /></p>
<h3>Sample Project: A Status Component</h3>
<p>You will be creating a simple status component as a sample project. It displays different icons according to the status set. As for the icons, I&#8217;m using two icons from the free &#8220;Silk&#8221; icon set which can be found on <a title="Silk Icon Set" onclick="pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');pageTracker._trackPageview('/outgoing/www.famfamfam.com/lab/icons/silk/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=6&amp;message=4');" href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">www.famfamfam.com</a>:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/famfamfam_icons.gif" alt="Sample Icons" width="40" height="20" /></p>
<p>The first icon is supposed to represent an &#8220;OK&#8221; status, and the other one signals an &#8220;Error&#8221; status. (For example, you could use this component as an item renderer in a Flex DataGrid for displaying the status of  the listed items.)</p>
<h3>Setting up the FlashDevelop Project</h3>
<p>Create a new project in FlashDevelop and select &#8220;ActionScript 3 / Default Project&#8221; as template. Call the project &#8220;StatusComponent&#8221; and save it. If you look at the project panel you will notice that FlashDevelop has already created two folders (<em>bin</em> and <em>src</em>) and a class file (<em>Main.as</em>) for you. Please make sure that the <em>src</em> folder is the only folder in your classpaths settings:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_properties.gif" alt="Project Properties" width="372" height="249" /></p>
<p>Now follow these steps:</p>
<ol>
<li>Create a third folder on the same level as the <em>bin</em> and <em>src</em> folders and call it <em>assets</em>.</li>
<li>Copy the two icon files into this new folder.</li>
<li>Under the <em>src</em> directory create a hierarchy of three sub directories: <em>com/log2e/components</em>. (I&#8217;m using my domain name here, you can name them whatever you like, of course. But it&#8217;s considered good practice to organize your class packages with the help of unique names such as domain names.)</li>
<li>Finally, move the class file <em>Main.as</em> into the <em>components</em> folder and rename the file to <em>StatusComponent.as</em>.</li>
</ol>
<p>Your project panel should look like this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_project_panel.gif" alt="Project Panel" width="416" height="220" /></p>
<p>Now open the <em>StatusComponet.as</em> file.</p>
<h3>The ActionScript Code</h3>
<p>I&#8217;m posting the complete class code first, and then I will go through the code step by step.</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Bitmap</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StatusComponent <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_UNSET:<span class="kw3">String</span> = <span class="st0">&quot;status_unset&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_OK:<span class="kw3">String</span> = <span class="st0">&quot;status_ok&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STATUS_ERROR:<span class="kw3">String</span> = <span class="st0">&quot;status_error&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>Embed<span class="br0">&#40;</span>source=<span class="st0">&quot;../../../../assets/accept.png&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> iconOK:<span class="kw2">Class</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>Embed<span class="br0">&#40;</span>source=<span class="st0">&quot;../../../../assets/exclamation.png&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> iconError:<span class="kw2">Class</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _status:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _statusIcon:Bitmap;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StatusComponent<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_status = STATUS_UNSET;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">status</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _status;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> <span class="kw3">status</span><span class="br0">&#40;</span> <span class="kw3">status</span>:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_status = <span class="kw3">status</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span><span class="br0">&#40;</span>_status<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> STATUS_OK:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusIcon = <span class="kw2">new</span> iconOK<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> STATUS_ERROR:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusIcon = <span class="kw2">new</span> iconError<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusIcon<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Line 1</strong>: The package definition reflects the directory structure we created below the <em>src</em> folder.</p>
<p><strong>Lines 3-4</strong>: We only need <code>Sprite</code> and <code>Bitmap</code> as display objects.</p>
<p><strong>Line 6</strong>: Since we are creating a visual component the <code>StatusComponent</code> class extends <code>Sprite</code>.</p>
<p><strong>Lines 8-10</strong>: The three constants hold the status definitions as strings. They are accessible from outside the component (for example, <code>StatusComponent.STATUS_OK</code>).</p>
<p><strong>Lines 12-15</strong>: The two [Embed] metadata tags include the two icons in the SWF and SWC files at compile-time. Instances of the embedded assets can be created by the standard <code>new</code> syntax.</p>
<p><strong>Lines 17-18</strong>: The two private variables hold the current status information and the displayed icon.</p>
<p><strong>Lines 20-22</strong>: When a new instance of the component is created the constructor sets the initial status to unset.</p>
<p><strong>Lines 25-28</strong>: The getter method for the <em>status</em> property.</p>
<p><strong>Lines 30-50</strong>: The setter method for the <code>status</code> property. This method not only updates the private <code>_status</code> property, but also removes the currently displayed icon from the display list and instantiates a new icon according to the status set.</p>
<h3>Exporting the SWC File</h3>
<p>All the hard work is done. The SWC file is only a mouse click away. Of course, you can test the component first by hitting F5. In this case you should modify the constructor and set the initial value to <code>STATUS_OK</code> or <code>STATUS_ERROR</code>, otherwise you will only see a blank canvas when you publish the movie. For the release version of the component set the initial value back to <code>STATUS_UNSET</code>. Now click on the new &#8220;Export SWC&#8221; icon and the magic happens right in front of your eyes&#8230;</p>
<p>If everything went ok, you will see a new file in your <em>bin</em> folder:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_bin_folder.gif" alt="bin Folder" width="171" height="50" /></p>
<p>If you tested the component (like I did) you also have the SWF file in the <em>bin</em> folder. Actually you can delete the <em>StatusComponent.swf</em> file now, it&#8217;s no longer needed.</p>
<h3>Using the StatusComponent</h3>
<p>For a quick test of the component create a new default ActionScript 3 project in FlashDevelop, call it &#8220;StatusComponentTest&#8221;, and make the <em>StatusComponent.swc</em> file accessible to your project by adding its path to the new project&#8217;s classpaths. The project panel should look like this:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/status_component_test_project_panel.gif" alt="Test Project Panel" width="416" height="153" /></p>
<p>Now this is important: Right-click on the <em>StatusComponent.swc</em> file and select &#8220;Add To Library&#8221;. Otherwise the class(es) in your SWC file will not be recognized.</p>
<p>Here&#8217;s a simple test class (<em>StatusComponentTest.as</em>) that instantiates the component and sets the status to <code>STATUS_OK</code>. The <code>trace()</code> statement sends the string value of the current status to the output panel.</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">components</span>.<span class="me1">StatusComponent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> StatusComponentTest <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _statusComponent:StatusComponent; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> StatusComponentTest<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusComponent = <span class="kw2">new</span> StatusComponent<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_statusComponent.<span class="kw3">status</span> = StatusComponent.<span class="me1">STATUS_OK</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span>_statusComponent<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span>_statusComponent.<span class="kw3">status</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>I hope you enjoyed the tutorial. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/07/creating-a-swc-component-in-flashdevelop/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
