<?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>Nate Beck &#187; proxy</title>
	<atom:link href="http://blog.natebeck.net/tag/proxy/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.natebeck.net</link>
	<description>AIR, Flex / Flash, FMS, PushButton, Game... Developer</description>
	<lastBuildDate>Wed, 07 Sep 2011 21:24:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Tip of the Day &#8211; Proxies&#8230; Make &#8216;em dynamic</title>
		<link>http://blog.natebeck.net/2009/01/tip-of-the-day-proxies-make-em-dynamic/</link>
		<comments>http://blog.natebeck.net/2009/01/tip-of-the-day-proxies-make-em-dynamic/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 14:00:48 +0000</pubDate>
		<dc:creator>Nate Beck</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Tip of the day]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://blog.natebeck.net/?p=198</guid>
		<description><![CDATA[A couple of days ago, I was working on my DateTime proxy class. DateTime.as (Trimmed version) package net.natebeck.core &#123; import com.flexoop.utilities.dateutils.DaylightSavingTimeUS; &#160; import flash.utils.Proxy; import flash.utils.flash_proxy; &#160; public class DateTime extends Proxy &#123; // Instance Variables protected var _date:Date; protected var _timezone:Timezone; &#160; public function DateTime&#40;... args&#41; &#123; super&#40;&#41;; &#160; _date = new Date&#40;args&#91;0&#93;&#41;; if&#40;args&#91;0&#93;]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago, I was working on my DateTime proxy class.</p>
<p>DateTime.as (Trimmed version)</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package net.<span style="color: #006600;">natebeck</span>.<span style="color: #006600;">core</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">flexoop</span>.<span style="color: #006600;">utilities</span>.<span style="color: #006600;">dateutils</span>.<span style="color: #006600;">DaylightSavingTimeUS</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Proxy</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #006600;">flash_proxy</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DateTime <span style="color: #0066CC;">extends</span> Proxy
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// Instance Variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> _date:<span style="color: #0066CC;">Date</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> _timezone:Timezone;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> DateTime<span style="color: #66cc66;">&#40;</span>... <span style="color: #006600;">args</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
                       _date = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span>args<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		       <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>args<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> is <span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>
		            setTimezone<span style="color: #66cc66;">&#40;</span>parseTimezone<span style="color: #66cc66;">&#40;</span>args<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTimezone<span style="color: #66cc66;">&#40;</span>value:Timezone<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Setting Timezone: &quot;</span>+value<span style="color: #66cc66;">&#41;</span>;
			_timezone = value;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getTimezone<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:Timezone
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Getting Timezone: &quot;</span>+_timezone<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">return</span> _timezone;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">getTimezoneOffset</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> _timezone.<span style="color: #006600;">offset</span>;
		<span style="color: #66cc66;">&#125;</span> 
&nbsp;
		override flash_proxy <span style="color: #000000; font-weight: bold;">function</span> callProperty<span style="color: #66cc66;">&#40;</span>methodName:<span style="color: #66cc66;">*</span>, ... <span style="color: #006600;">args</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #66cc66;">*</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> res:<span style="color: #66cc66;">*</span>;
	        <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>methodName.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 
	        <span style="color: #66cc66;">&#123;</span>
	            <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'toString'</span>:
	            	res = <span style="color: #ff0000;">&quot;foobar&quot;</span>;
	            	<span style="color: #b1b100;">break</span>;  
	            <span style="color: #000000; font-weight: bold;">default</span>:
	                res = _date<span style="color: #66cc66;">&#91;</span>methodName<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">apply</span><span style="color: #66cc66;">&#40;</span>_date, args<span style="color: #66cc66;">&#41;</span>;
	                <span style="color: #b1b100;">break</span>;
	        <span style="color: #66cc66;">&#125;</span>
	        <span style="color: #b1b100;">return</span> res;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override flash_proxy <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>:<span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;getting property: &quot;</span>+<span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#41;</span>;
	        <span style="color: #b1b100;">return</span> _date<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#93;</span>;
	    <span style="color: #66cc66;">&#125;</span>
&nbsp;
	    override flash_proxy <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">name</span>:<span style="color: #66cc66;">*</span>, value:<span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	        _date<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">name</span><span style="color: #66cc66;">&#93;</span> = value;
	    <span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>I wrote a simple test application to test my DateTime Proxy class while I&#8217;m developing.</p>
<p>TestDateTime.as</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> net.<span style="color: #006600;">natebeck</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">DateTime</span>;
	<span style="color: #0066CC;">import</span> net.<span style="color: #006600;">natebeck</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">Timezone</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TestDateTime <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> TestDateTime<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> create:<span style="color: #0066CC;">Object</span> = <span style="color: #ff0000;">&quot;Jun 17 12:00:00 GMT-0500 2009&quot;</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> oldDate:<span style="color: #0066CC;">Date</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span>create<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">var</span> strDate:DateTime = <span style="color: #000000; font-weight: bold;">new</span> DateTime<span style="color: #66cc66;">&#40;</span>create<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;old: &quot;</span>+oldDate<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;new: &quot;</span>+strDate<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			strDate.<span style="color: #006600;">getTimezone</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			strDate.<span style="color: #006600;">setTimezone</span><span style="color: #66cc66;">&#40;</span>Timezone.<span style="color: #006600;">PST</span><span style="color: #66cc66;">&#41;</span>;
			strDate.<span style="color: #006600;">getTimezone</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>strDate.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>When trying to compile using Flex Builder I ran into this error:</p>
<p>ERROR 1061: Call to a possibly undefined method toString through a reference with static type net.natebeck.core:DateTime.</p>
<p>I thought to myself, &#8220;Well that&#8217;s lame&#8230; the whole reason I&#8217;m using the Proxy class is so I don&#8217;t have to re-write every method within my class&#8221;. </p>
<p>As usual, the issue wasn&#8217;t with the compiler, it was me being dumb.  Computers&#8230; they&#8217;re always right.</p>
<p>The answer was simple, and makes complete sense after someone mentioned it.</p>
<p><strong>When creating your own Proxy class, make them dynamic!</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #0066CC;">dynamic</span> <span style="color: #000000; font-weight: bold;">class</span> DateTime <span style="color: #0066CC;">extends</span> Proxy</pre></div></div>

<p>If you&#8217;re confused about when or why to use the flash.utils.Proxy class, I gave a presentation yesterday at the <a href="http://seaflexug.org/">Seattle Flex User Group</a> about the Proxy class.  My presentation materials are posted <a href="http://natebeck.net/talks">here</a>.</p>
<p>I&#8217;d also like to thank Dale and <a href="http://flex.joshmcdonald.info/">Josh McDonald</a> for quickly responding to my question on flexcoders.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.natebeck.net/2009/01/tip-of-the-day-proxies-make-em-dynamic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

