e​a​s​y​U​I​动​态​添​加​控​件​带​渲​染​效​果

Query EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法 
 
2011-03-22 12:53 
 现象: 
       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(){   




     阅读会员限时特惠 7大会员特权立即尝鲜      
 




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"的元素         






 




jQuery EasyUI parser 的使用场景 
2012年03月07日 ⁄ parser ⁄ 共 1237字 ⁄ 评论数 1 ⁄ 被围观 3,768 views+ 
文章目录 
[隐藏] 
 1自动调用parser:  2手动调用parser: 
o 2.1(1) 解析目标为指定DOM的所有子孙元素,不包含这个DOM自身: o 
2.2(2) 某些组件无法多次解析同一个DOM元素: 
parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据class就能正常渲染页面全靠它了。一般情况下,我们并用不到解析器,本文主要讨论一下,什么情况下会用到它,如何使用。  
自动调用parser: 
我们之所以在页面中,只要书写相应的class,Easyui就能成功渲染页面,这是因为解析器在默认情况下,会在文档装载完成的时候($(document).ready)被调用一次,而且是渲染整个页面。 
手动调用parser: 
有些童鞋反映,当页面装载完后,如果用javascript生成的DOM中包含了Easyui支持控件的class,比如说,用javascript生成了以下代码: 
1 <div class="easyui-accordion" id="tt"> 2         <div title="title1">1</div> 3     <div title="title2">2</div> 






 




4 </div> 
虽然页面上有这样的DOM了,但是没有被渲染为Easyui的accordion插件,原因很简单,Easyui并不会一直监听页面,所以不会主动渲染,这时候就需要手工调用Easyui的parser进行解析了。不过手工调用需要注意以下几点: 
(1) 解析目标为指定DOM的所有子孙元素,不包含这个DOM自身: 
比如上面代码生成的HTML,id="tt"是我们想要的手风琴DIV,像下面代码去手工解析的话是得不到你想要的结果的: 
1 $.parser.parse($('#tt')); 
道理很简单,parser只渲染tt的子孙元素,并不包括tt自身,而它的子孙元素并不包含任何Easyui支持的控件class,所以这个地方就得不到你想要的手风琴效果了,应该这样写: 
1 $.parser.parse($('#tt').parent()); 
渲染tt的父节点的所有子孙元素就可以了,个人觉得通过jQuery的parent()方法是最安全不过的了,不管你的javascript输出了什么DOM,直接渲染其父节点就可以保证页面能被正确解析。 
(2) 某些组件无法多次解析同一个DOM元素: 
如果页面上本身就有tt元素: 
1 <div class="easyui-accordion" id="tt"> 2 </div> 
页面装载完,你通过脚本向tt元素append两个子DIV,然后解析: 
1 $('#tt').append('<div 
title="title1">1</div><div 
title="title2">2</div>') 






 




2 $.parser.parse($('#tt').parent()); 
不要以为你会得到一个满意的accordion,你什么也得不到,因为页面初始化的时候parser就主动渲染过tt元素,这时候tt已经被parser重构,你再到脚本中append,得到的DOM结构,其实并不是你预想的结果了,所以要避免这种用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值