﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-刘文涛-随笔分类-prototype</title><link>http://www.blogjava.net/liuwentao253/category/14328.html</link><description>I am a coder</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:33:09 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:33:09 GMT</pubDate><ttl>60</ttl><item><title>Prototype.js--Javascript编写者的小军刀 </title><link>http://www.blogjava.net/liuwentao253/archive/2006/08/21/64803.html</link><dc:creator>刘文涛</dc:creator><author>刘文涛</author><pubDate>Mon, 21 Aug 2006 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/liuwentao253/archive/2006/08/21/64803.html</guid><description><![CDATA[
		<p> Prototype.js 是Javascript编写者的一把小军刀，提供了<font color="#0000ff"><strong>Ruby风格</strong></font>的简写语法和实效的函数，更难得的是完全跨浏览器，让大家舒舒服服写出又精简又不用愁心兼容的的JS代码，springside 已经离不开它了。  Prototype.js最重要的文档有：</p>
		<p>Developer Notes for Prototype.js 中文版 (英文原版) <br />script.aculo.us的wiki <br />文档集合：<a href="http://www.prototypedoc.com/">http://www.prototypedoc.com/</a><br /><br />1.1 最爱$系列 <br />我最喜欢是可以用${"bookDiv"} 等价于通用的document.getElementByID("bookDiv")</p>
		<p>值得留意的还有和CSS一样的批量选择语法$$()，如</p>
		<p>$$('div#left_books).each(.) <br />Element系列有很多实用的函数：  </p>
		<p>$('bookdiv').update(' &lt; p &gt;  &lt;/ p &gt; ');  // 更新innerHtml  <br />$('bookdiv').show(); <br />$('bookdiv').hide();<br />$('bookdiv').toggle();   // 切换visiable <br />$('bookdiv').visiable();   // 返回是否visiable <br />$('bookdiv').scrollTo(); <br />  .....还有很多 </p>
		<p>1.2 传统的Ajax<br />传统的基于URL的ajax函数简单实用。</p>
		<p>   new  Ajax.Updater('bookdiv', "foo .jsp " ); <br />此函数的还有很多可选的参数，参数列表见此：</p>
		<p> </p>
		<p>new Ajax.Updater('bookdiv',"foo.jsp", {onComplete: initObserve});</p>
		<p>比如需要异步执行ajax, 更新bookdiv后需要重新执行initObserve, onComplete的设置就刚好满足你的要求。</p>
		<p>另有可定时执行Ajax的PeriodicalUpdater。</p>
		<p>1.3 Form系列函数也不错<br />Form.serialize   将Form中所有Input对象的值转化为一个URL String，方便把Form转为用 URL Get方式的Ajax提交，最经典的用Ajax提交Form的例子: </p>
		<p>
				<br />  &lt; form action = " /action/here "  method = " post "  <br />   onsubmi = " new Ajax.Updater('div_to_be_updated', '/action/here', {parameters:Form.serialize(this)});<br />              return false; " &gt;   <br />  另外，Form.focusFirstElement , Form.getInputs等函数也很实用。  </p>
		<p>1.4 Event系列<br />除了后述的Observe模式外，还有下列保证兼容IE和FF的事件函数：</p>
		<p>1.Event.element(event)，找出触发事件的element.</p>
		<p>2.Event.findElement(event,tagName)，搜索DOM tree里事件的响应链里的第一个符合tagName的element.</p>
		<p>3.pointerX(event),pointerY(event)等.</p>
		<p>还定义了一些标准KeyCode，见：<a href="http://www.sergiopereira.com/articles/prototype.js.html#Reference.Extensions.Event">http://www.sergiopereira.com/articles/prototype.js.html#Reference.Extensions.Event</a></p>
		<p>1.5 Ruby风格 <br />1.循环函数</p>
		<p>
				<br />elements.each(  function (element){<br />        alert(element); <br />       }); <br />2.不定参数</p>
		<p>
				<br />new  Ajax.Updater('mydiv', ' / foo / bar', {asynchronous: true });</p>
		<p>2. Observe模式达到搜索引擎Friendly<br />Observe模式，就是连接仍然以&lt;a href="foo.jsp"&gt;形式编写，用Observe为其加入onClick事件的侦听。 这样，当搜索引擎访问时，就会访问传统的URL；而用户使用IE访问时，就会被Observe转为使用onClick事件的Ajax效果。</p>
		<p>见SpringSide中的/home/index.jsp 图书详情察看--通过selector查找需要处理的链接（a），循环为每个链接添加观察者，为click事件，添加handle函数。   <br /> </p>
		<p>$$('div#left_books  *  a[href]').each( function (element){<br />Event.observe(element,'click',handlerCilckEvent, false );<br />});</p>
		<p>function  handlerCilckEvent(event){<br />     var  element  =  Event.element(event);<br />     new  Ajax.Updater('bookdiv',element.href); <br />    Event.stop(event);<br />    $('bookdiv').show();<br />} <br />3.script.aculo.us的DomBuilder<br />script.aculo.us语法超简洁的Builder, 相比之下W3c的Dom Builder语法简直是噩梦。html片断不复杂时如果用JSTemplate有点大炮打蚊子，用script.aculo.us的Builder就够了。<br />Builder很有Ruby的风格，请看下面一句 ： </p>
		<p>foo =  Builder.node('a', {href: " foo.jsp " },categorys[i].name) <br />第1个参数是element类型，第2个是可选的attribbute，第3个是节点内的子节点。<br />如果要换成W3c的Dom函数写法，善哉善哉。</p>
		<p>下面这段更明显，直接照元素的页面顺序来生成对象，而不是像W3C Dom Builder很逻辑抽象的，先生成对象，然后append到父元素。</p>
		<p>div  =  Builder.node('div',{className:linkDiv},[ <br />                       Builder.node('a', {href: " foo.jsp " }, categorys[i].name)  ]<br />         );</p>
		<p> </p>
		<p>当然了，还是没有JS Template清晰，所以Builder只作为html片断非常短时使用。</p>
		<p> </p>
		<p>
				<br />Trackback: <a href="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1036306">http://tb.blog.csdn.net/TrackBack.aspx?PostId=1036306</a></p>
		<p> </p>
<img src ="http://www.blogjava.net/liuwentao253/aggbug/64803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuwentao253/" target="_blank">刘文涛</a> 2006-08-21 15:32 <a href="http://www.blogjava.net/liuwentao253/archive/2006/08/21/64803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>