jQuery EasyUI動態添加控件或者ajax加載頁面后不能自動渲染問題的解決方法


 

博客分類:

現象:

       AJAX返回的html無法做到自動渲染為EasyUI的樣式.比如:class="easyui-layout" 等

 

處理方法:

      在html片段加載完畢后使用

Js代碼   收藏代碼
  1. $.parser.parse(context)  

     即可重新渲染。

 

實現原理:

 

    首先附上jquery.parser.js的源碼

Js代碼   收藏代碼
  1. (function($){  
  2.     $.parser = {  
  3.         auto: true,  
  4.         plugins:['linkbutton','menu','menubutton','splitbutton','layout',  
  5.                  'tree','window','dialog','datagrid',  
  6.                  'combobox','combotree','numberbox','validatebox',  
  7.                  'calendar','datebox','panel','tabs','accordion'  
  8.         ],  
  9.         parse: function(context){  
  10.             if ($.parser.auto){  
  11.                 for(var i=0; i<$.parser.plugins.length; i++){  
  12.                     (function(){  
  13.                         var name = $.parser.plugins[i];  
  14.                         var r = $('.easyui-' + name, context);  
  15.                         if (r.length){  
  16.                             if (r[name]){  
  17.                                 r[name]();  
  18.                             } else if (window.easyloader){  
  19.                                 easyloader.load(name, function(){  
  20.                                     r[name]();  
  21.                                 })  
  22.                             }  
  23.                         }  
  24.                     })();  
  25.                 }  
  26.             }  
  27.         }  
  28.     };  
  29.     $(function(){  
  30.         $.parser.parse();  
  31.     });  
  32. })(jQuery);  

   框架默認在頁面加載完成后自動使用$.parser.parse()對整個文檔進行渲染

 

1. jQuery EasyUI動態添加控件或者ajax加載頁面后不能自動渲染問題的解決方法:

我們之所以在頁面中,只要書寫相應easyui的class,Easyui就能成功渲染頁面,這是因為解析器在默認情況下,parser會在文檔裝載完成的時候($(document).ready)被調用一次,而且是渲染整個頁面。

然而當頁面裝載完后,如果用javascript生成的DOM中包含了Easyui支持控件的class,比如說,用javascript生成了以下代碼:

<a id="tt" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">easyui</a>

 雖然頁面上有這樣的DOM了,但是沒有被渲染為Easyui的linkbutton插件,原因是Easyui並不會一直監聽頁面,所以不會主動渲染,這時候就需要手工調用Easyui的parser進行解析了。

手工調用需要注意以下幾點:

解析目標為指定DOM的所有子孫元素,不包含這個DOM自身:

比如上面代碼生成的HTML,id="tt"是我們想要的LinkButton,像下面代碼去手工解析的話是得不到你想要的結果的:

 $.parser.parse($('#tt'));

道理很簡單,parser只渲染tt的子孫元素,並不包括tt自身,而它的子孫元素並不包含任何Easyui支持的控件class,所以這個地方就得不到你想要的效果了,應該這樣寫:

 $.parser.parse($('#tt').parent());

渲染tt的父節點的所有子孫元素就可以了,不管你的javascript輸出什么DOM,直接渲染其父節點就可以保證頁面能被正確解析。

----------------------------------------------

試了下,可以。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM