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

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

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

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

1  var _mainlock=[];

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

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


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

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


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

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


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

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



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

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

 



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      当我们有了Ajax了,基本所有页面都可能用Html为文件后~了,TAG不用写了Q?lt;%%>W号也不用写了,那么Q我们还用得着Struts或JSF吗? 
      然后热心的大?strong>kebin_liu l我指点了迷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說穿了就只是資料傌與頁面處理的角度L考,的確會認為AJAX可以替代一?web framework。只是當一切都改用 AJAX來處理的時候,開發的工作勢必變得零繁瑣,像用小刀D牛Q最i牛一定會死,但是操刀者辛苦不說,那頭牛也飽受凌遲?

而因?web framework無法處理純a頁面部分的控Ӟ所以不有沒有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有了AJAX也是一樣的?/font>


govo 2006-09-08 01:51 发表评论
]]>
让我们ؓ梦想而努?/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>