作者:江南白衣 ,@_@
(本文为SpringSide参考手册一部分,更多Java开源项目开发指南请访问SpringSide参考手册)
Prototype.js 是Javascript编写者的一把小军刀,提供了Ruby风格的简写语法和实效的函数,更难得的是完全跨浏览器,让大家舒舒服服写出又精简又不用愁心兼容的的JS代码,springside 已经离不开它了。
Prototype.js最重要的文档有:
1.1 最爱$系列
我最喜欢是可以用${"bookDiv"} 等价于通用的document.getElementByID("bookDiv")
值得留意的还有和CSS一样的批量选择语法$$(),如

Element系列有很多实用的函数:

$(‘bookdiv‘).show();
$(‘bookdiv‘).hide();
$(‘bookdiv‘).toggle(); // 切换visiable
$(‘bookdiv‘).visiable(); // 返回是否visiable
$(‘bookdiv‘).scrollTo();
.....还有很多
1.2 传统的Ajax
传统的基于URL的ajax函数简单实用。
此函数的还有很多可选的参数,参数列表见此:
比如需要异步执行ajax, 更新bookdiv后需要重新执行initObserve, onComplete的设置就刚好满足你的要求。
另有可定时执行Ajax的PeriodicalUpdater。
1.3 Form系列函数也不错
Form.serialize 将Form中所有Input对象的值转化为一个URL String,方便把Form转为用 URL Get方式的Ajax提交,最经典的用Ajax提交Form的例子:
onsubmi = " new Ajax.Updater(‘div_to_be_updated‘, ‘/action/here‘, {parameters:Form.serialize(this)});
return false; " >
另外,Form.focusFirstElement , Form.getInputs等函数也很实用。
1.4 Event系列
除了后述的Observe模式外,还有下列保证兼容IE和FF的事件函数:
1.Event.element(event),找出触发事件的element.
2.Event.findElement(event,tagName),搜索DOM tree里事件的响应链里的第一个符合tagName的element.
3.pointerX(event),pointerY(event)等.
还定义了一些标准KeyCode,见:http://www./articles/prototype.js.html#Reference.Extensions.Event
1.5 Ruby风格
1.循环函数
alert(element);
});
2.不定参数
2. Observe模式达到搜索引擎Friendly
Observe模式,就是连接仍然以<a href="foo.jsp">形式编写,用Observe为其加入onClick事件的侦听。 这样,当搜索引擎访问时,就会访问传统的URL;而用户使用IE访问时,就会被Observe转为使用onClick事件的Ajax效果。
见SpringSide中的/home/index.jsp 图书详情察看--通过selector查找需要处理的链接(a),循环为每个链接添加观察者,为click事件,添加handle函数。
Event.observe(element,‘click‘,handlerCilckEvent, false );
});
function handlerCilckEvent(event){
var element = Event.element(event);
new Ajax.Updater(‘bookdiv‘,element.href);
Event.stop(event);
$(‘bookdiv‘).show();
}
3.script.的DomBuilder
script.语法超简洁的Builder, 相比之下W3c的Dom Builder语法简直是噩梦。html片断不复杂时如果用JSTemplate有点大炮打蚊子,用script.的Builder就够了。
Builder很有Ruby的风格,请看下面一句 :
第1个参数是element类型,第2个是可选的attribbute,第3个是节点内的子节点。
如果要换成W3c的Dom函数写法,善哉善哉。
下面这段更明显,直接照元素的页面顺序来生成对象,而不是像W3C Dom Builder很逻辑抽象的,先生成对象,然后append到父元素。
Builder.node(‘a‘, {href: " foo.jsp " }, categorys[i].name) ]
);
当然了,还是没有JS Template清晰,所以Builder只作为html片断非常短时使用。
呵呵,就像spring离不开了
只使用一点点的话,那个头还是有点汗D..呵。。
假如我
asynchronous: true,
onComplete: changeDydx
这会执行changeDydx,
但是如何我true--->>false
它就不会执行了,查看源代码也是印证如此,那么这如何处理呢?
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<script language="javascript" src=="prototype.js"></script>
<BODY>
<script>
function test3()
{
alert( $F(‘userName‘) );
}
</script>
<input type="text" id="userName" value="Joe Doe"><br>
<input type="button" value=Test3 onclick="test3();"><br>
</BODY>
</HTML>
<script language="javascript" src=="prototype.js"></script>
to
<script language="javascript" src="prototype.js"></script>
我如果这样
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
getList(articleID,articleNum,titleLength,isShowDate,isNewWin,isPaged,folder,xmlHttp,pageNum,t,brandName,style,firstColWidth,pagingStyle,mainPagingDivStyle);
hideDiv("ShowMsg");
}
}
}
我需要在status==200后,传送那么多参数到getList,怎么在prototype中实现,感觉好像showResponse方法只支持2个参数,如何修改,还有一个就是在做跨站调用的时候还是自己写代码好点,好像prototype写出来的跨站获取数据无法运行,firefox ie,opera
如果想在一个html文件中引入多个js文件应该怎么做呀?
我发现在<head></head>之间只能插入一行
<script language="javascript" src="xxx.js"></script>