码迷,mamicode.com
首页 > Web开发 > 详细

jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

时间:2015-06-09 23:32:01      阅读:832      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://www.cnblogs.com/sunjie9606/archive/2012/09/13/2683636.html

现象:

       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()对整个文档进行渲染

 

Js代码  
  1. $.parser.auto   //是否自动进行渲染  
  2. $.parser.plugins  //包含目前EasyUI框架中所有的插件名称  
  3. $.parser.parse(context)  
  4. //context  为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档  
  5. //渲染对象为: class="easyui-pluginName"的元素

 

当AJAX异步获取了HTML代码之后,这一段代码是包含JQuery EasyUI 的属性和样式的,这时这些属性和样式并不会生效。这里说说解决方案

我们先来了解页面在刷新或打开时JQuery EasyUI都干了些什么:

在加载完HTML的时候,JQuery EasyUI 会找class=“easyui-xxxx”的样式来初始化JQuery EasyUI 控件,搜索JQuery EasyUI 混淆之后的源代码,找到这么一段:

(function(Extra open brace or missing close brace.parser={auto:true,onComplete:function(_142){
},plugins:["linkbutton","menu","menubutton","splitbutton","tree","combobox","combotree","numberbox","validatebox","numberspinner","timespinner","calendar","datebox","layout","panel","datagrid","tabs","accordion","window","dialog"],parse:function(_143){
var aa=[];
for(var i=0;i<Misplaced &(function(){
if(!window.easyloader&&Extra open brace or missing close brace.parser.parse();
}
});
})(jQuery);

 

当看完之后$.parser.parse();这一句不就是重绘JQuery EasyUI 控件的么。当执行这一句话的时候JQuery EasyUI 会对整个页面的DOM进行解析,效率是比较慢的。当然我们AJAX异步获取的仅仅是一段HTML,没有必要对整个页面进行解析。

当我们异步获取来的HTML放入一个容器里,比如这样

$(‘#xxxx‘).html(异步获取回来的内容) ,我们在解析这一段异步获取回来的HTML中的JQuery EasyUI控件时,可以这样做:

.parser.parse((‘#xxxx‘));

这样就只解析$(‘#xxxx‘)内部的HTML中的JQuery EasyUI控件。

 

可以使用$.parser.parse();这个方法进行处理;

例如:
 
$.parser.parse();
表示对整个页面重新渲染,渲染完就可以看到easyui原来的样式了;
 
var targetObj = $("<input name=‘mydate‘ class=‘easyui-datebox‘>").appendTo("#id");
$.parser.parse(targetObj);
表示重新渲染某个特定的组件。

 

 

此测试已经通过,此方法很可靠。

jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

标签:

原文地址:http://www.cnblogs.com/exmyth/p/4564814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!