easyUI的treegrid添加節點(append)時間過長,設置等待(wait)遮罩效果

如題所述,在treegrid中,一次添加多個節點時,時間很長,但easyUI並沒有顯示等待信息,讓人覺得是陷入了死循環,或者死機了,用戶體驗不好。javascript

原本,treegrid(或者datagrid)有所謂的loadMsg,但只在加載數據時顯示。添加節點,則不見有這種機制。css

只能本身動手,豐衣足食了。html

像不少次尋找答案同樣,在網上搜索了許久,基本上都是一些互相抄襲,似是而非,不知所謂的垃圾。做者煞有介事地這樣說,但有沒有實際應用過,到底行不行,很讓人懷疑。java

或者只貼一點代碼,缺少足夠的解釋,讓人變成丈二金剛。app

通過一番努力,終於達到我本身想要的效果:異步

從一棵樹中選中了許多節點,一次性複製到另外一棵樹。期間耗時比較長,會先顯示等待信息;添加完成之後,等待消息消失。async

沒有代碼我說個J8:ide


應用場景:函數

easyUI的一個對話框:ui

<div id="dlg_Add_template" class="easyui-dialog"   style=" width:600px; ">……</div>
<script type="text/javascript">
$('#dlg_Add_template').dialog('open');
</script>

這個對話框上有1個tree,1個treegrid。須要從tree上選擇節點,複製到treegrid。

[javascript]  view plain copy
  1. function _loadwaiting(){//顯示等待信息  
  2.     var wrap = $("#dlg_Add_template");  
  3.     $("<div class=\"datagrid-mask\"></div>").css({display:"block",width:wrap.width(),height:wrap.height()}).appendTo(wrap);  
  4.     $("<div class=\"datagrid-mask-msg\"></div>").html("please wait...").appendTo(wrap).css({display:"block",left:(wrap.width()-$("div.datagrid-mask-msg",wrap).outerWidth())/2,top:(wrap.height()-$("div.datagrid-mask-msg",wrap).outerHeight())/2});  
  5. }  
  6. function _removeloading(){//隱藏等待信息  
  7.     var wrap = $("#dlg_Add_template");  
  8.     wrap.find("div.datagrid-mask-msg").remove();  
  9.     wrap.find("div.datagrid-mask").remove();  
  10. }  

以上代碼從參考文章摘取,但通過改寫。原文是對easyUI的所謂擴展,仍然只支持數據加載才顯示。


而後調用:

[javascript]  view plain copy
  1. function _copyTo() {  
  2.     _loadwaiting();//顯示等待信息  
  3.   
  4.     //將選中節點複製到目標樹  
  5.     (代碼略)  
  6.   
  7.     _removeloading();//隱藏等待信息  
  8. }  

結果意料之中,開始複製節點時,等待信息根本沒來得及顯示,直到複製完成才一閃而過,根本沒有達到應有的效果!

這時應引入異步機制,最好有回調函數!

但treegrid並沒有提供相應的事件。受阮一峯的文章啓發,能夠模擬一下,用setTimeout:

[javascript]  view plain copy
  1. function copy(){  
  2.     _loadwaiting();//顯示等待信息  
  3.   
  4.     setTimeout(_copyTo,500);//500毫秒後開始複製工做  
  5. }  
  6. }  
  7. function _copyTo() {  
  8.     //將選中節點複製到目標樹  
  9.     (代碼略)  
  10.   
  11.     _removeloading();//隱藏等待信息  
  12. }  

參考文章:

http://www.cnblogs.com/dreamcat/archive/2010/10/30/easyui_datagrid_mask.html

http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

相關文章
相關標籤/搜索