您的位置:首页 > Web前端 > JQuery

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

2015-06-09 22:53 1216 查看
转自:http://www.cnblogs.com/sunjie9606/archive/2012/09/13/2683636.html

现象:

AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等

处理方法:

在html片段加载完毕后使用

Js代码

$.parser.parse(context)

即可重新渲染。

实现原理:

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

Js代码

(function($){

$.parser = {

auto: true,

plugins:['linkbutton','menu','menubutton','splitbutton','layout',

'tree','window','dialog','datagrid',

'combobox','combotree','numberbox','validatebox',

'calendar','datebox','panel','tabs','accordion'

],

parse: function(context){

if ($.parser.auto){

for(var i=0; i<$.parser.plugins.length; i++){

(function(){

var name = $.parser.plugins[i];

var r = $('.easyui-' + name, context);

if (r.length){

if (r[name]){

r[name]();

} else if (window.easyloader){

easyloader.load(name, function(){

r[name]();

})

}

}

})();

}

}

}

};

$(function(){

$.parser.parse();

});

})(jQuery);

框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染

Js代码

$.parser.auto //是否自动进行渲染

$.parser.plugins //包含目前EasyUI框架中所有的插件名称

$.parser.parse(context)

//context 为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档

//渲染对象为: 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);
表示重新渲染某个特定的组件。

此测试已经通过,此方法很可靠。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: