<?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>Hacker for Hire &#187; ajax</title>
	<atom:link href="http://blog.hackerforhire.org/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hackerforhire.org</link>
	<description>Burning Down People&#039;s Dreams Since That One Day ...</description>
	<lastBuildDate>Mon, 16 Jan 2012 02:39:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Rails With Calendar Date Select</title>
		<link>http://blog.hackerforhire.org/2008/03/29/rails-with-calendar-date-select/</link>
		<comments>http://blog.hackerforhire.org/2008/03/29/rails-with-calendar-date-select/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 23:17:15 +0000</pubDate>
		<dc:creator>Wyatt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://blog.hackerforhire.org/2008/03/29/rails-with-calendar-date-select/</guid>
		<description><![CDATA[Today, I spent 2-hours trying to figure out the correct way to implement an AJAX based call with the wonderful Calendar Date Select plugin. Now I&#8217;m sure it&#8217;s totally my fault for being a Rails noob, but I couldn&#8217;t come up with squat on Google for how to use this plugin with an server side [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I spent 2-hours trying to figure out the correct way to implement an AJAX based call with the wonderful <a href="http://code.google.com/p/calendardateselect/">Calendar Date Select</a> plugin.  Now I&#8217;m sure it&#8217;s totally my fault for being a Rails noob, but I couldn&#8217;t come up with squat on Google for how to use this plugin with an server side AJAX call.  So here&#8217;s my write up on how to do it using <strong>remote_function</strong>.<br />
<span id="more-197"></span></p>
<p>According to the documentation, if I want to use an AJAX style call, I should use the <strong>onchange</strong> attribute, which executes some JavaScript for you.  That&#8217;s cool, I can do that.  But that&#8217;s not really that helpful for trying to update the server unless you use the Ajax.Updater() like <a href="http://www.integrallis.com/ourblogs/articles/2008/01/15/building-tempo-with-rails-part-vi">these guys did</a>.  Alrighty, so now I&#8217;ve got to figure out my controller URL, build that in and then pass in some parameters to my JavaScript I&#8217;m writing inside my Rails code.</p>
<p><font size=3><strong>WRONG!</strong></font></p>
<p>The first time I saw that I had to be writing JavaScript, I should have know I was trolling the wrong websites.  I started to think and remembered that I used an AJAX call somewhere else in my code to sort a list.  No dice.  The implements sortable hides everything from me and again wasn&#8217;t even close to what I was looking for.  More searching and I finally &#8230; FINALLY &#8230; found some bastion of sanity that said you are supposed to use <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html">remote_function</a> to make AJAX based calls.  I knew this was exactly what I was looking for when I saw the name and when I read that you don&#8217;t have to write JavaScript to make it work &#8230; it writes it for you.</p>
<p>Only there was a snag.  <a href="http://code.google.com/p/calendardateselect/">Calendar Date Select</a>&#8216;s <strong>onchange</strong> gives you the function <strong>$F(this)</strong> to retrieve the date.  But it&#8217;s a JavaScript function, not a Rails function &#8230; so you have to some how get the JavaScript variable to be a Rails variable &#8230; going the other way is cake:</p>
<div class="codesnip-container" >
<div class="rails codesnip"><span class="st0">&quot;/* javascript in rails */ var t = #{@myObject.date};&quot;</span></div>
</div>
<p>So now, I started search for how to make a JavaScript variable part of a Rail&#8217;s POST request.  It&#8217;s the <strong>:with</strong> parameter.  So now my call looks like:</p>
<div class="codesnip-container" >
<div class="rails codesnip"><span class="sy0">&lt;</span>span <span class="kw1">class</span>=<span class="st0">&quot;emphasize&quot;</span><span class="sy0">&gt;</span>Scheduled <span class="kw1">for</span> <span class="sy0">&lt;</span>span id=<span class="st0">&#8216;current_show_date&#8217;</span><span class="sy0">&gt;&lt;</span> <span class="sy0">%</span>= date_no_time_format<span class="br0">&#40;</span>@<span class="kw5">show</span>.<span class="me1">date</span><span class="br0">&#41;</span> <span class="sy0">%&gt;&lt;/</span>span<span class="sy0">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span> <span class="sy0">%</span>= calendar_date_select_tag <span class="st0">&quot;show[date]&quot;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; date_no_time_format<span class="br0">&#40;</span>@<span class="kw5">show</span>.<span class="me1">date</span><span class="br0">&#41;</span>.<span class="kw5">to_s</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re3">:time</span> <span class="sy0">=&gt;</span> <span class="kw2">false</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re3">:popup</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;force&quot;</span>, <span class="re3">:hidden</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re3"> <img src='http://blog.hackerforhire.org/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange</span> <span class="sy0">=&gt;</span> <span class="kw5">remote_function</span><span class="br0">&#40;</span>:<span class="kw5">update</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;current_show_date&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re3">:url</span> <span class="sy0">=&gt;</span> <span class="br0">&#123;</span>:action <span class="sy0">=&gt;</span> <span class="st0">&quot;update_show_date&quot;</span>, <span class="re3">:id</span> <span class="sy0">=&gt;</span> @<span class="kw5">show</span>.<span class="me1">id</span><span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re3">:with</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;&#8217;date=&#8217;+$F(this)&quot;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">%&gt;</span><br />
&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;/</span>span<span class="sy0">&gt;</span></div>
</div>
<p>After 2-hours of trying to find this, I find the &#8220;F(this)&#8221; so true <img src='http://blog.hackerforhire.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .  Well, now another problem &#8230; the date is coming across as &#8220;Monday, January 1 2009.&#8221;  Which I&#8217;m sure I can do all sorts of fun conversions on inside of the ruby code &#8230; but I don&#8217;t want to.  It&#8217;s going in the database as a <strong>DateTime</strong>, it should be passed as an ISO date.  But of course, there is no ISO date formate for <a href="http://code.google.com/p/calendardateselect/">Calendar Date Select</a>.  Fortunately, you can extend it and someone took the time to write an ISO formate for it &#8230; but they left it all busted to hell in the comments section.  So I fixed it.  Then I fixed all the <a href="http://jslint.org">jslint</a> problems with it so it would actually work in IE.  You can download it <a href='http://blog.hackerforhire.org/wp-content/uploads/2008/03/format_iso_date.js' title='ISO Formatter for Calendar Date Select'>here</a>, or copy it from here:</p>
<div class="codesnip-container" >
<div class="javascript codesnip">Date.<span class="me1">prototype</span>.<span class="me1">toFormattedString</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>include_time<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hour<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> str <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">getFullYear</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;-&quot;</span> <span class="sy0">+</span> Date.<span class="me1">padded2</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">getMonth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;-&quot;</span> <span class="sy0">+</span>Date.<span class="me1">padded2</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">getDate</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>include_time<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; hour <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">getHours</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; str <span class="sy0">+=</span> <span class="st0">&quot; &quot;</span> <span class="sy0">+</span> <span class="kw1">this</span>.<span class="me1">getHours</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;:&quot;</span> <span class="sy0">+</span> <span class="kw1">this</span>.<span class="me1">getPaddedMinutes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> str<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></p>
<p>Date.<span class="me1">parseFormattedString</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>string<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">var</span> regexp <span class="sy0">=</span> <span class="st0">&quot;([0-9]{4})(-([0-9]{2})(-([0-9]{2})&quot;</span> <span class="sy0">+</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;( ([0-9]{1,2}):([0-9]{2})?&quot;</span> <span class="sy0">+</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;?)?)?)?&quot;</span><span class="sy0">;</span> </p>
<p>&nbsp; &nbsp; <span class="kw2">var</span> d <span class="sy0">=</span> string.<span class="me1">match</span><span class="br0">&#40;</span><span class="kw2">new</span> RegExp<span class="br0">&#40;</span>regexp<span class="sy0">,</span> <span class="st0">&quot;i&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d <span class="sy0">===</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> Date.<span class="me1">parse</span><span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// at least give javascript a crack at it.</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> offset <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw2">var</span> date <span class="sy0">=</span> <span class="kw2">new</span> Date<span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setMonth</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setDate</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">7</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setHours</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">7</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">8</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setMinutes</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">8</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setSeconds</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; date.<span class="me1">setMilliseconds</span><span class="br0">&#40;</span>Number<span class="br0">&#40;</span><span class="st0">&quot;0.&quot;</span> <span class="sy0">+</span> d<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; offset <span class="sy0">=</span> <span class="br0">&#40;</span>Number<span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">6</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">+</span> Number<span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">8</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; offset <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>d<span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st0">&#8216;-&#8217;</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="nu0">1</span> <span class="sy0">:</span> <span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <span class="kw1">return</span> date<span class="sy0">;</span> <br />
<span class="br0">&#125;</span><span class="sy0">;</span></div>
</div>
<p>Drop in your as [project]/public/javascript/calendar_date_select/format_iso_date.js.  Then add the following lines to your <strong>environment.rb</strong>:</p>
<div class="codesnip-container" >
<div class="ruby codesnip"><span class="co1"># Custom Date/Time formating for CalendarDateSelect</span><br />
&nbsp; <span class="re2">CalendarDateSelect::FORMATS</span><span class="br0">&#91;</span><span class="re3">:iso_date</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1"># Here&#8217;s the code to pass to Date#strftime</span><br />
&nbsp; &nbsp; <span class="re3">:date</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;%Y-%m-%d&quot;</span>,<br />
&nbsp; &nbsp; <span class="re3">:time</span> <span class="sy0">=&gt;</span> <span class="st0">&quot; %I:%M %p&quot;</span>, &nbsp;<span class="co1"># notice the space before time. &nbsp;If you want date and time to be seperated with a space, put the leading space here.</span><br />
&nbsp; &nbsp; <span class="re3">:javascript_include</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;format_iso_date&quot;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; CalendarDateSelect.<span class="kw3">format</span> = <span class="re3">:iso_date</span></div>
</div>
<p>Lesson learned &#8230; if the path looks complex, it&#8217;s probably not the wrong way &#8230; but it&#8217;s more than likely not the right way.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hackerforhire.org/2008/03/29/rails-with-calendar-date-select/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

