??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲日本欧美韩国,天堂va在线高清一区,96久久久久久http://www.aygfsteel.com/govo/zh-cnFri, 20 Jun 2025 00:50:39 GMTFri, 20 Jun 2025 00:50:39 GMT60l你的元素加一把锁Q-Prototype.jshttp://www.aygfsteel.com/govo/archive/2006/09/14/69724.htmlgovogovoThu, 14 Sep 2006 10:26:00 GMThttp://www.aygfsteel.com/govo/archive/2006/09/14/69724.htmlhttp://www.aygfsteel.com/govo/comments/69724.htmlhttp://www.aygfsteel.com/govo/archive/2006/09/14/69724.html#Feedback0http://www.aygfsteel.com/govo/comments/commentRss/69724.htmlhttp://www.aygfsteel.com/govo/services/trackbacks/69724.html (tng)  在Ajax应用中,我们常常要频J更Ҏ(gu)一元素的倹{例如有一ID?pageBody"的元素,我们x所有文章内定w在这里显C,做到局部刷新的Ajax应用。但如果因ؓ(f)|速较慢,使得此元素在接收信息时就被用h行其它行为,而改变此元素的内容了(jin)Q而之前的接收信息的线E还在进行着Q当此线E完成了(jin)Q又把pageBody的值改?jin)一下,此时用户?x)觉得不知所措,怎么q块东西闪来闪去的?严重者,?x)因为子元素的消p出现JS错误的现象?br />  Z(jin)解决此问题,有两个方法:(x)W一、在执行U程Q假设执行一ơ取gؓ(f)一个线E)(j)的时候,建立一个满屏的DIVQ得用h法执行其它行为;W二、制作一把锁Q把此元素锁hQ当其它U程x变它的值时先查(g)此元素是否上锁?br />  W一U方法得用戯入了(jin){待状态,虽然面没有hQ但与没有用Ajax的页面没什么分别,所以在非不得已的情况下都不要用此Ҏ(gu)?br />  下面我说说第二种Ҏ(gu)Q-制作元素锁?br />  其实要实现这个锁Q原理很单,与java中的U程锁有点类|可惜偶对java的线E锁理解不深入,所以在javaScript中此锁与java的线E锁应该又会(x)有很大的不同Q甚臛_全不是一个回事?br />  首先Q我们需要一个ObjectQ?/p>
var  (tng)_key = {key:key,value: true };

其中key为此对象的标识,value是否为真q于是否ؓ(f)锁定?br />在java中,每一个Object对象都可以用作锁Q但javaScript中不同,而且通过

1 (tng) (tng)while(true){
2 (tng) (tng) (tng)if(condition) (tng)break;
3 (tng) (tng)}

的方法根本行不通,因ؓ(f)q个while(true)?x)让览器僵死,Firefox?x)提C是否l执行脚?IE可能?x)说脚本有误Q杀毒Y件可能说q是病毒Q?br />  Z(jin)能统领全局Q更灉|的掌控它Q我们把锁都攑ֈ一个数l中Q?/p>

1 (tng) (tng)var (tng)_mainlock=[];

同时Qؓ(f)?jin)方便应用,我用?jin)Prototype.jsQ以扩展Array的方法,主要用这三个Ҏ(gu)Q?br />1、detect(iterator)Q集合中每个元素调用一ơIteratorQ返回第一个Iteratorq回True的元素,如果最l都没有为true的调用,那么q回null?br /> (tng)2、reject(iterator)Q返回所有等于false的元素?br /> (tng)3、each(iterator)Q把每个element做ؓ(f)W一个参敎ͼelement的index作ؓ(f)W一个参数调用iterator函数?br /> (tng)有了(jin)它们Q我们可以创Z个Push来给 _mainlock加入唯一key的锁Q类似HashMap原理Q?br />

 (tng) var  (tng)_Push = function (Obj) {
 (tng) (tng)
var  (tng)unIns = _mainlock.reject( function (d) { return  (tng)d.key == Obj.key;} );
 (tng) (tng)_mainlock
= unIns;
 (tng) (tng)_mainlock.push(Obj);
 (tng)}


只要执行_Push(_key)可以把对象攑օq个伪HashMap中去。如果已有相同的key的对象,则会(x)覆盖它,没有q接放入?br />

var  (tng)get = function (key) {
 (tng) (tng)
return  (tng)_mainlock.detect( function (d) { return  (tng)d.key == key;} );
 (tng)}
;


 (tng)通过q个Ҏ(gu)Q就可以取得相应Key的锁?jin)?br /> (tng)因ؓ(f)JavaScript对DOM的操作有着很多未知性,不可能L通过我们预先定义的变量来满要求Q如一个列表,可能是有一行,也可能上千行Q每一行的ID又是独立的,所以我们只能用另外的方法来预见之此行ؓ(f)Q那是通过应用HashMap的特性,以string为标识的唯一Key来统领所有将可能发生的事件。因此,再写一个方法:(x)

 (tng) var  (tng)Lock = function (key) {
 (tng) (tng)
var  (tng)_key = {key:key,value: true } ;
 (tng) (tng)_Push(_key);
 (tng) (tng)
return  (tng) true ;
 (tng)}
;


q样Q只要有一个stringcd的keyQ就可以建立一个锁对象?jin)。以后,寚w的徏立和获取Q都可以通过上面三个Ҏ(gu)来实?只要一个string作ؓ(f)Key来操作锁,而无需知道锁的内部是如何构造?br />接下来,我们要实现isWait(),sleep(),awake()和awakeAll()Ҏ(gu)Q以完善q个锁:(x)

 (tng) var  (tng)isWait = function (key) { // q回真表C锁Q否则表C非?/span>
 (tng) (tng) var  (tng)ins = GDnews.get(key);
 (tng) (tng)
if (ins) (tng) return  (tng)ins.value;
 (tng) (tng)
return  (tng) false ;
 (tng)}
;
 (tng)
var  (tng)sleep = function (key,time) { // l锁上锁指定U数Q若q秒后自动解?/span>
 (tng) (tng)GDnews.Lock(key);
 (tng) (tng)window.setTimeout(
function () {GDnews.awake(key)} ,time);
 (tng)}
;
 (tng)
var  (tng)awake = function (key) { // 开?/span>
 (tng) (tng) var  (tng)_key = {key:key,value: false } ;
 (tng) (tng)GDnews._Push(_key);
 (tng) (tng)
return  (tng) false ;
 (tng)}
;
 (tng)
var  (tng)awakeAll = function () { // 打开所有锁
 (tng) (tng) if ( ! GDnews._mainlock) (tng) return  (tng) " all " ;
 (tng) (tng)
var  (tng)newList = [];
 (tng) (tng)GDnews._mainlock.each(
function (d,index) {
 (tng) (tng) (tng)d.value
= false ;
 (tng) (tng) (tng)newList.push(d);
 (tng) (tng)}
);
 (tng) (tng)GDnews._mainlock
= newList;
 (tng) (tng)
return  (tng) false ;
 (tng)}
;
 (tng)



 (tng)以后Q当你用Prototype.js的快捷键$()Ӟ可以看看目标是否ؓ(f)isWaitQ否的话可以Lock或者sleep一下了(jin)?/p>

 (tng)以上是全文内容Q请各位指点?/p>

 (tng)



govo 2006-09-14 18:26 发表评论
]]>
听君一c话http://www.aygfsteel.com/govo/archive/2006/09/08/68406.htmlgovogovoThu, 07 Sep 2006 17:51:00 GMThttp://www.aygfsteel.com/govo/archive/2006/09/08/68406.htmlhttp://www.aygfsteel.com/govo/comments/68406.htmlhttp://www.aygfsteel.com/govo/archive/2006/09/08/68406.html#Feedback0http://www.aygfsteel.com/govo/comments/commentRss/68406.htmlhttp://www.aygfsteel.com/govo/services/trackbacks/68406.html (tng) (tng) (tng) (tng) (tng) (tng)当我们有?jin)Ajax?jin),基本所有页面都可能用Html为文件后~?jin),TAG不用写了(jin)Q?lt;%%>W号也不用写?jin),那么Q我们还用得着Struts或JSF吗? (tng)
 (tng) (tng) (tng) (tng) (tng) (tng)然后热心(j)的大?strong>kebin_liu l我指点?jin)迷z,现在把他的话抄下Q?img height="19" src="http://www.aygfsteel.com/Emoticons/emteeth.gif" width="19" border="0" />

用一句俗語來解釋會比較容易瞭解,那就是『殺雞焉用牛刀』?
Struts{?web framework是牛刀Q那AJAX是D雞刀Q殺雞小刀能不能取代牛刀?當然可以Q只是用起來會不順手不方便而已。但反過來牛刀能不能取代小刀?{案是沒辦法完全取代Q因為會有死角?

web framework適合處理web ap的運作流E,而AJAX適合資料傌與頁面處理,如果從所有的web ap說穿?jin)就只是資料傌與頁面處理的角度L考,的確會認為AJAX可以替代一?web framework。只是當一切都改用 AJAX來處理的時候,開發的工作勢必變得零繁瑣,像用小刀D牛Q最i牛一定會死,但是操刀者辛苦不說,那頭牛也飽受凌遲?

而因?web framework無法處理純a(b)頁面部分的控Ӟ所以不有沒有AJAXQweb ap都離不開 scriptQ因?web framework有這個死角,所以說webframework無法取代 AJAX?

再用一個比喻,web framework像是徏的主體QAJAX則是裝ŞQ一個結構穩固又適度裝Ş的房子,才是最舒適的居住空間。只有裝潢的房子Q其實就是樣品屋Q雖然也可以住hQ但是結構畢竟不I。而過渡裝潢或沒有裝Ş的房子,一樣讓Z起來不舒服?

^之Qweb framework是架構面QAJAX則偏重於UI處理Q二者的角色是相輔相成才,並沒有互相衝H。不有沒有AJAXQ不?framework本來還是可以開?web apQ但我們從來就不會因此?framework是多的Q有?jin)AJAX也是一樣的?/font>


govo 2006-09-08 01:51 发表评论
]]>
让我们ؓ(f)梦想而努?/title><link>http://www.aygfsteel.com/govo/archive/2006/09/08/68404.html</link><dc:creator>govo</dc:creator><author>govo</author><pubDate>Thu, 07 Sep 2006 17:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/govo/archive/2006/09/08/68404.html</guid><wfw:comment>http://www.aygfsteel.com/govo/comments/68404.html</wfw:comment><comments>http://www.aygfsteel.com/govo/archive/2006/09/08/68404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/govo/comments/commentRss/68404.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/govo/services/trackbacks/68404.html</trackback:ping><description><![CDATA[今天鼓v勇气向管理员甌BlogJavaQ希望能以此Ȁp己,能在q最后一q的大学z里Q更加努力!<img src ="http://www.aygfsteel.com/govo/aggbug/68404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/govo/" target="_blank">govo</a> 2006-09-08 01:34 <a href="http://www.aygfsteel.com/govo/archive/2006/09/08/68404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">质</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ذ</a>| <a href="http://" target="_blank">Ѱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׸</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̶</a>| <a href="http://" target="_blank">͡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ຣʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ʱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank">Թ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̽</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>