prototype.js 1.4版开发者手册
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
prototype.js是什么?
[p]万一你没有使用过大名鼎鼎的prototype.js,那么让我来告诉你,[url=http://prototype.conio.net/]prototype.js[/url]是由[url=http://conio.net/]sam stephenson[/url]写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。[/p]
[p]如果你最近尝试使用它,你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样,一开始,我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。我想,在我学习完它之后,把我学到的东西分享给大家是件不错的事。[/p]
[p]同时,在本文中,我也将提供一个关于这个类库提供的objects,classes,functions,extensions这对东东的[url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#reference]非官方参考[/url][/p]
[p]在阅读这个文档时,熟悉ruby的开发者将会注意到ruby的一些内建类和本类库扩展实现之间非常相似。[/p]
相关文章
[p]advanced [url=http://sergiopereira.com/articles/advjs.html]javascript guide[/url].[/p]
一些实用的函数
[p]这个类库带有很多预定义的对象和实用函数,这些东东的目的显然是把你从一些重复的打字中解放出来 。[/p]
使用$()方法
[p]$() 方法是在dom中使用过于频繁的 document.getelementbyid() 方法的一个便利的简写,就像这个dom方法一样,这个方法返回参数传入的id的那个元素。[/p]
[p]比起dom中的方法,这个更胜一筹。你可以传入多个id作为参数然后 $() 返回一个带有所有要求的元素的一个 array 对象。[/p][br]
[br]
[br]
[br]
this is a paragraph [br][br]
[br]
this is another paragraph [br][br] [br] [br] [p]另外一个好处是,这个函数能传入用string表示的对象id,也可以传入对象本身,这样,在建立其它能传两种类型的参数的函数时非常有用。[/p] 使用$f()函数 [p]$f()函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如text box,drop-down list。这个方法也能用元素id或元素本身做为参数。[/p][br] [br] 使用$a()函数 [p]$a()函数能把它接收到的单个的参数转换成一个array对象。[/p] [p]这个方法,结合被本类库扩展了的array类,能方便的把任何的可枚举列表转换成或拷贝到一个array对象。一个推荐的用法就是把dom node lists转换成一个普通的array对象,从而更有效率的进行遍历,请看下面的例子。[/p][br] [br] [p][/p] 使用 $h() 函数 [p]$h()函数把一些对象转换成一个可枚举的和联合数组类似的hash对象。[/p] [p][/p] 使用$r()函数 [p]$r()是new objectrange(lowbound,upperbound,excludebounds)的缩写。[/p] [p]跳到[url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#reference.objectrange]objectrange[/url] 类文档可以看到一个关于此类的完整描述. 此时,我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在[url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#reference.enumerable]enumerable[/url] 对象文档中找到。[/p][br] [p][/p] 使用try.these()函数 try.these() 方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易, 他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行,返回成功执行的那个方法的返回值。 在下面的例子中, xmlnode.text在一些浏览器中好用,但是xmlnode.textcontent在另一些浏览器中正常工作。 使用try.these()方法我们可以得到正常工作的那个方法的返回值。 [p][br] [/p] [p][/p] ajax对象 [p]上面提到的共通方法非常好,但是面对它吧,它们不是最高级的那类东西。它们是吗?你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。[/p] [p]我很肯定你对prototype.js感兴趣的原因很可能是由于它的ajax能力。所以让我们解释当你需要完成ajax逻辑的时候,这个包如何让它更容易。[/p] ajax 对象是一个预定义对象,由这个包创建,为了封装和简化编写[url=http://en.wikipedia.org/wiki/ajax_%28programming%29]ajax[/url] 功能涉及的狡猾的代码。 这个对象包含一系列的封装ajax逻辑的类。我们来看看其中几个类。 使用ajax.request类 如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建xmlhttprequest对象并且异步的跟踪它的进程, 然后解析出响应 然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。 为了支持 ajax 功能。这个包定义了 ajax.request 类。 [p]假如你有一个应用程序可以通过url [i]http://yoursever/app/get_sales?empid=1234&year=1998[/i]与服务器通信。它返回下面这样的xml 响应。[/p][br] 你注意到传入 ajax.request构造方法的第二个对象了吗? 参数{method: 'get', parameters: pars, oncomplete: showresponse} 表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method 值为 'get'的属性,另一个属性名为 parameters 包含http请求的查询字符串,和一个oncomplete 属性/方法包含函数showresponse。 还有一些其它的属性可以在这个对象里面定义和设置,如 asynchronous,可以为true 或 false 来决定ajax对服务器的调用是否是异步的(默认值是 true)。 这个参数定义ajax调用的选项。在我们的例子中,在第一个参数通过http get命令请求那个url,传入了变量 pars包含的查询字符串, ajax.request 对象在它完成接收响应的时候将调用showresponse 方法。 也许你知道, xmlhttprequest在http请求期间将报告进度情况。这个进度被描述为四个不同阶段:[i]loading[/i], [i]loaded[/i], [i]interactive[/i], 或 [i]complete[/i]。你可以使 ajax.request 对象在任何阶段调用自定义方法 ,[i]complete[/i] 是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onxxxxx 属性/方法中提供自定义的方法对象。 就像我们例子中的 oncomplete 。你传入的方法将会被用一个参数调用,这个参数是 xmlhttprequest 对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的http结果代码的 status 属性。 还有另外两个有用的选项用来处理结果。我们可以在onsuccess 选项处传入一个方法,当ajax无误的执行完后调用, 相反的,也可以在onfailure选项处传入一个方法,当服务器端出现错误时调用。正如onxxxxx 选项传入的方法一样,这两个在被调用的时候也传入一个带有ajax请求的xmlhttprequest对象。 [p]我们的例子没有用任何有趣的方式处理这个 xml响应, 我们只是把这段xml放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息,然后更新页面中的某些元素, 或者甚至可能做某些xslt转换而在页面中产生一些html。[/p] [p]在1.4.0版本中,一种新的事件回传外理被引入。如果你有一段代码总是要为一个特殊的事件执行,而不管是哪个ajax调用引发它,那么你可以使用新的[url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#ajax.responders]ajax.responders[/url]对象。[/p] [p]假设你想要在一个ajax调用正在运行时,显示一些提示效果,像一个不断转动的图标之类的,你可以使用两个全局事件handler来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。[/p] ![]() [br] this text has[br] a lot of[br] links. some are[br] external[br] and some are local[br] [br] [p]上面的代码仅仅是一点小小的实践让人爱上这种语法。请参看 [url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#reference.enumerable][color=#800080]enumerable[/color][/url]和[url=http://cnblogs.com/thinhunan/archive/2006/04/01/364404.html#reference.array][color=#800080]array[/color][/url]的所有函数[/p] [p][/p] [p][/p] prototype.js参考 [p][/p] javascript类扩展 [p]prototype.js 类库实现强大功能的一种途径是扩展已有的javascript 类。[/p] [p][/p] 对 [color=#000000]object的扩展[/color] method kind arguments description extend(destination, source) static destination: any object, source: any object 提供一种通过拷贝所有源以象属性和函数到目标函数实现继承的方法 inspect(targetobj) static targetobj: any object 返回可读性好关于目标对象的文字描述,如果对象实例没有定义一个inspect函数,默认返回tostring函数的值。 [p][/p] [color=#000000]对number的扩展[/color] method kind arguments description tocolorpart() instance (none) 返回数字的十六进制表示形式。在把一个rgb数字转换成html表现形式时很有用。 succ() instance (none) 返回下一个数字,这个方法可用于迭代调用场景中。 times(iterator) instance iterator: a function object conforming to function(index) calls the [color=#000000]iterator function repeatedly passing the current index in the index argument. 反复调用iterator函数并传递当前index到iterator的index参数。 [/color] [p]下面的例子用提示框显示0-9。[/p][b该文章在 2010/7/3 14:57:11 编辑过 |
关键字查询
相关文章
正在查询... |