<?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>LetRails &#187; JS</title>
	<atom:link href="http://www.letrails.cn/archives/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.letrails.cn</link>
	<description>为Ruby on Rails在中文社区的枝繁叶茂贡献点滴</description>
	<lastBuildDate>Fri, 10 Sep 2010 13:27:14 +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>Jester：ActiveResource的JS实现</title>
		<link>http://www.letrails.cn/archives/jester-a-js-implementation-of-activeresource/</link>
		<comments>http://www.letrails.cn/archives/jester-a-js-implementation-of-activeresource/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 14:44:41 +0000</pubDate>
		<dc:creator>yuanyi</dc:creator>
				<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/jester%ef%bc%9aactiveresource%e7%9a%84js%e5%ae%9e%e7%8e%b0-2</guid>
		<description><![CDATA[ThoughtBot开发的Jester库可以让你通过JS访问REST API，它提供了与ActiveRecord类似的语法，并同时支持JSON与XML。]]></description>
			<content:encoded><![CDATA[<p><a href="http://jesterjs.org/"><img src='http://lilac.greatweb.cn/rails/wp-content/uploads/2008/01/picture-1.png' alt='picture-1.png' /></a></p>
<p><a href="http://www.thoughtbot.com/">ThoughtBot</a>开发的<a href="http://jesterjs.org/">Jester</a>库可以让你通过JS访问REST API，它提供了与ActiveRecord类似的语法，并同时支持JSON与XML。</p>
<p class="img"><img src='http://lilac.greatweb.cn/rails/wp-content/uploads/2008/01/example3.png' alt='example3.png' /></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/jester-a-js-implementation-of-activeresource/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI: Yahoo! Web UI库</title>
		<link>http://www.letrails.cn/archives/07-11-14-yui-intro/</link>
		<comments>http://www.letrails.cn/archives/07-11-14-yui-intro/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 09:22:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/07-11-14-yui-intro</guid>
		<description><![CDATA[YUI是Yahoo!提供的一组JS实现的开源Web UI库，基于BSD协议，目前包括拖拽（drag and drop），自动完成（autocomplete），日历（calendar），颜色挑选（color picker），数据表（data table），日志（logger），菜单（menu）等等。 使用很简单，以日历控件为例： &#60;link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.0/build/calendar/assets/calendar.css"&#62; &#60;script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/yahoo-dom-event/yahoo-dom-event.js"&#62;&#60;/script&#62; &#60;script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/calendar/calendar-min.js"&#62;&#60;/script&#62; &#60;span id="cal1Container" style="width: 200px; display: block; float: none"&#62;&#60;/span&#62; &#60;input id="obj_test" name="obj[test]" readonly="yes" size="12" value="2007-11-14" /&#62; &#60;script type="text/javascript"&#62; &#160;&#160;&#160;&#160; function selectDay(stuff, days) { &#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160; $('obj_test').value = "" + days[0][0][0] + "/" + days[0][0][1] + "/" + days[0][0][2] &#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.yahoo.com/yui/">YUI</a>是Yahoo!提供的一组JS实现的开源Web UI库，基于BSD协议，目前包括拖拽（drag and drop），自动完成（autocomplete），日历（calendar），颜色挑选（color picker），数据表（data table），日志（logger），菜单（menu）等等。</p>
<p>使用很简单，以日历控件为例：</p>
<p class="code"><code>&lt;link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.0/build/calendar/assets/calendar.css"&gt;<br />
&lt;script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/yahoo-dom-event/yahoo-dom-event.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/calendar/calendar-min.js"&gt;&lt;/script&gt;<br />
&lt;span id="cal1Container" style="width: 200px; display: block; float: none"&gt;&lt;/span&gt;<br />
&lt;input id="obj_test" name="obj[test]" readonly="yes" size="12" value="2007-11-14" /&gt;<br />
&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; function selectDay(stuff, days) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; $('obj_test').value = "" + days[0][0][0] + "/" + days[0][0][1] + "/" + days[0][0][2]<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; cal1 = new YAHOO.widget.Calendar("cal1","cal1Container");<br />
&nbsp;&nbsp;&nbsp;&nbsp; cal1.cfg.setProperty("selected","2007-11-14",false);<br />
&nbsp;&nbsp;&nbsp;&nbsp; cal1.render();<br />
&nbsp;&nbsp;&nbsp;&nbsp; cal1.selectEvent.subscribe(selectDay);<br />
&lt;/script&gt;</code></p>
<p>效果如下，文本框会跟随日期的改变而改变：</p>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.0/build/calendar/assets/calendar.css">
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/yahoo-dom-event/yahoo-dom-event.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/calendar/calendar-min.js"></script><br />
<span id="cal1Container" style="width: 200px; display: block; float: none"></span></p>
<input id="obj_test" name="obj[test]" readonly="yes" size="12" value="2007-11-14" />
<script type="text/javascript">
    function selectDay(stuff, days) {
        document.getElementById("obj_test").value = "" + days[0][0][0] + "/" + days[0][0][1] + "/" + days[0][0][2]
    }
    cal1 = new YAHOO.widget.Calendar("cal1","cal1Container");
    cal1.cfg.setProperty("selected","2007-11-14",false);
    cal1.render();      
    cal1.selectEvent.subscribe(selectDay);
</script></p>
<p>貌似需要一个rYUI项目让事情变得更简单一些？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/07-11-14-yui-intro/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RJS实现Select级联</title>
		<link>http://www.letrails.cn/archives/65/</link>
		<comments>http://www.letrails.cn/archives/65/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 08:51:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/65</guid>
		<description><![CDATA[还记得前面的那个Ajax Select的例子吗？实际上实现像国家，城市这样option已经确定的select的级联并没有必要使用Ajax，通过客户端JS就可以轻松实现，而不必向服务端发送请求。 1. 生成person resource script/generate person country:string state:string 由于不再需要向服务端发送请求，因此没有必要生成一个单独的city resource。 2. 执行rake db:migrate 3. 修改app/views/layouts/people.rhtml，包含prototype： &#60;%= javascript_include_tag 'prototype' %&#62; 4. 修改app/views/people/new.rhtml: &#60;%= update_page_tag do &#124;page&#124; &#160;&#160; page &#60;&#60; "function change_state(country_value) {" &#160;&#160;&#160;&#160;page &#60;&#60; 'if(country_value == "United States")' &#160;&#160;&#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select(US_STATES) &#160;&#160;&#160;&#160;page &#60;&#60; 'else if(country_value == "China")' &#160;&#160;&#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select(CHINA_STATES) &#160;&#160;&#160;&#160;page &#60;&#60; 'else' &#160;&#160;&#160;&#160;page['person_state'].replace_html options_for_select([['Not applicable', '']]) [...]]]></description>
			<content:encoded><![CDATA[<p>还记得前面的那个<a href="http://www.letrails.cn/archives/35">Ajax Select的例子</a>吗？实际上实现像国家，城市这样option已经确定的select的级联并没有必要使用Ajax，通过客户端JS就可以轻松实现，而不必向服务端发送请求。</p>
<p>1. 生成person resource</p>
<p class="code"><code>script/generate person country:string state:string</code></p>
<p>由于不再需要向服务端发送请求，因此没有必要生成一个单独的city resource。</p>
<p>2. 执行rake db:migrate<br />
3. 修改app/views/layouts/people.rhtml，包含prototype：</p>
<p class="code"><code class="ruby">&lt;%= javascript_include_tag <span class="string">'prototype'</span> %&gt;</code></p>
<p>4. 修改app/views/people/new.rhtml:</p>
<p class="code"><code class="ruby">&lt;%= update_page_tag do |page|<br />
&nbsp;&nbsp; page &lt;&lt; "function change_state(country_value) {"<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'if(country_value == "United States")'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select(US_STATES)<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'else if(country_value == "China")'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select(CHINA_STATES)<br />
&nbsp;&nbsp;&nbsp;&nbsp;page &lt;&lt; 'else'<br />
&nbsp;&nbsp;&nbsp;&nbsp;page['person_state'].replace_html options_for_select([['Not applicable', '']])<br />
&nbsp;&nbsp;page &lt;&lt; "}"<br />
end<br />
%&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;Country&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;%= f.country_select :country, ['China', 'United States'], {:selected=&gt;'China'},<br />
&nbsp;&nbsp;&nbsp;&nbsp; <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange =&gt; 'change_state(this.options[this.selectedIndex].value)'<br />
%&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&lt;b&gt;States&lt;/b&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&lt;%= f.select :state, CHINA_STATES %&gt;<br />
&lt;/p&gt;</code></p>
<p>相比于上一篇，new.rhtml的改动还是比较大的：</p>
<ul>
<li>我们使用country_select来自动生成国家select</li>
<li> <img src='http://www.letrails.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nchange方法现在指向本地的JS函数change_state，而非remote_function生成的一个AJAX函数。</li>
<li>change_state函数没有向服务器发送请求，它在本地保存了所有支持国家的省份信息</li>
</ul>
<p>5. 当然，我们需要定义两个名为US_STATES和CHINA_STATES的常量来保存两个国家的省份信息：</p>
<p class="code"><code class="ruby">US_STATES = [["Please select", ""], [ "Alabama", "AL" ], [ "Alaska", "AK" ], ..........<br />
CHINA_STATES = [["Please select", ""], [ "Beijing", "BJ" ], [ "Shanghai", "SH" ], ..........</code></p>
<p>6. 默认：</p>
<p id="n5:w" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_170g8r4r3hq" style="width: 293px; height: 246px" /></p>
<p>7. 选择United States:</p>
<p id="ws_z" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_171dfrcpz4m" style="width: 291px; height: 196px" /></p>
<p>8. 选择其他国家：</p>
<p id="m1_t" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_172hfcfvsck" style="width: 288px; height: 137px" /></p>
<p>参考：</p>
<ul>
<li><a href="http://onrails.org/articles/2006/01/12/rjs-and-link_to_function"> .rjs and link_to_function</a></li>
<li><a href="http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html">Rails API参考</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/65/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plotr：轻量级的Javascript制图库</title>
		<link>http://www.letrails.cn/archives/54/</link>
		<comments>http://www.letrails.cn/archives/54/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 12:25:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JS]]></category>

		<guid isPermaLink="false">http://www.letrails.cn/archives/54</guid>
		<description><![CDATA[简介 Plotr是一个基于PlotKit与MochiKit的轻量级Javascript制图库，目前支持的浏览器包括： Firefox 1.5+ Safari 2.0+ Opera 9.0+ IE6+（作者声称支持，但我的测试结果是不行，至少IE6不行） 作者：sabmann 最新版本：0.2.0 下载：http://code.google.com/p/plotr/downloads/list 许可：BSD License 使用 Plotr依赖于prototype以及HTML Canvas，因此需要包含3个JS文件： &#60;script src="prototype.js" type="text/javascript"&#62;&#60;/script&#62; &#60;script src="excanvas.js" type="text/javascript"&#62;&#60;/script&#62; &#60;script src="plotr.js" type="text/javascript"&#62;&#60;/script&#62; Plotr的使用相当简单，下面是Plotr的官方示例： &#60;div&#62;&#60;canvas id="bars1" height="300" width="500"&#62;&#60;/canvas&#62;&#60;/div&#62; &#60;script type="text/javascript"&#62; // Define a dataset. var dataset = { &#160;&#160;&#160;&#160;'myFirstDataset': [[0, 1], [1, 1], [2, 1.414], [3, 1.73], [4, 2.56]], &#160;&#160;&#160;&#160;'mySecondDataset': [[0, 0.3], [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold">简介</span></p>
<p>Plotr是一个基于PlotKit与MochiKit的轻量级Javascript制图库，目前支持的浏览器包括：</p>
<ul>
<li>Firefox 1.5+</li>
<li>Safari 2.0+</li>
<li>Opera 9.0+</li>
<li>IE6+（作者声称支持，但我的测试结果是不行，至少IE6不行）</li>
</ul>
<p><span style="font-weight: bold">作者：</span><a href="http://code.google.com/u/sabmann/">sabmann</a><br />
<span style="font-weight: bold">最新版本：</span>0.2.0<br />
<span style="font-weight: bold">下载：</span><a href="http://code.google.com/p/plotr/downloads/list" title="http://code.google.com/p/plotr/downloads/list" id="nq0d">http://code.google.com/p/plotr/downloads/list</a><br />
<span style="font-weight: bold">许可：</span>BSD License</p>
<p><span style="font-weight: bold">使用</span></p>
<p>Plotr依赖于prototype以及<a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29" title="Wikipedia on Canvas">HTML Canvas</a>，因此需要包含3个JS文件：</p>
<p class="code"><code class="ruby">&lt;script src="prototype.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script src="excanvas.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script src="plotr.js" type="text/javascript"&gt;&lt;/script&gt;</code></p>
<p>Plotr的使用相当简单，下面是Plotr的官方示例：</p>
<p class="code"><code class="ruby">&lt;div&gt;&lt;canvas id="bars1" height="300" width="500"&gt;&lt;/canvas&gt;&lt;/div&gt;<br />
&lt;script type="text/javascript"&gt;<br />
// Define a dataset.<br />
var dataset = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;'myFirstDataset': [[0, 1], [1, 1], [2, 1.414], [3, 1.73], [4, 2.56]],<br />
&nbsp;&nbsp;&nbsp;&nbsp;'mySecondDataset': [[0, 0.3], [1, 2.67], [2, 1.34], [3, 1.73], [4, 1.9]],<br />
&nbsp;&nbsp;&nbsp;&nbsp;'myThirdDataset': [[0, 0.46], [1, 1.45], [2, 2.5], [3, 1.2], [4, 2.4]],<br />
&nbsp;&nbsp;&nbsp;&nbsp;'myFourthDataset': [[0, .86], [1, 0.83], [2, 3], [3, 1.73], [4, 0.76]],<br />
};<br />
// Define options.<br />
var options = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Define a padding for the canvas node<br />
&nbsp;&nbsp;&nbsp;&nbsp;padding: {left: 30, right: 0, top: 10, bottom: 30},<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Background color to render.<br />
&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor: '#d8efb0',<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Use the predefined blue colorscheme.<br />
&nbsp;&nbsp;&nbsp;&nbsp;colorScheme: 'grey',<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Render a horizontal oriented barchart.<br />
&nbsp;&nbsp;&nbsp;&nbsp;barOrientation: 'vertical',<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Set the labels.<br />
&nbsp;&nbsp;&nbsp;&nbsp;xTicks: [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{v:0, label:'day 1'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{v:1, label:'day 2'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{v:2, label:'day 3'},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{v:3, label:'day 4'}<br />
&nbsp;&nbsp;&nbsp;&nbsp;]<br />
};<br />
// Instantiate a new BarCart.<br />
var vertical = new Plotr.BarChart('bars1',options);<br />
// Add a dataset to it.<br />
vertical.addDataset(dataset);<br />
// Render it.<br />
vertical.render();<br />
&lt;/script&gt;</code></p>
<p>效果如下：</p>
<p id="img_2586527157914884" style="padding: 1em 0pt; text-align: left"><img src="http://docs.google.com/File?id=ahxzccrw5xq_146c9rf3cch" style="width: 498px; height: 288px" /></p>
<p>更多信息请访问<a href="http://www.solutoire.com/plotr" title="这里" id="x47u">这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.letrails.cn/archives/54/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
