问题(参考:http://blog.csdn.net/zhgl7688/article/details/50970387 ,
http://blog.csdn.net/lcore/article/details/27588017):
进入主界面的时候,页面的并不是马上就展现,而是会有一个混乱的过程,之后一闪就又好了。
原因:就是因为easyui是在dom载入完毕之后才会对整个页面进行解析,当布局和组件比较多的时候,完整的解析组件就需要一个过程,就会出现短暂的界面混乱现象。
分析:easyui解析器$.parser.parse()控制着整个页面的解析,可以监听它解析完成事件,加遮罩层提醒等待。
解决办法:利用$.parser的onComplete 事件+载入遮罩。
1.遮罩层dom,要放在<Body>下的第一个:
<div id="loading" style="position:absolute;z-index:1000;top:0px;left:0px;width:100%;height:100%;background:#DDDDDB;text-align :center;padding-top:20%;"> <h1><font color="#15428B">加载中....</font></h1> </div>
2.监听$.parser的onComplete,要放在该页面自定义<script>标签的第一个,在Jquery Easyui的引用之后第一个最好:
<script>
var pc;
//不要放在$(function(){});中
$.parser.onComplete = function () {
if (pc) clearTimeout(pc);
pc = setTimeout(closes, 1000);
}
function closes() {
$('#loading').fadeOut('normal', function () {
$(this).remove();
});
}
</script>
附:Parser(解析器)应用场景
easyui根据class就能正常的渲染页面都是靠parser。通常情况下我们在开发的时候并不会用到解析器。下面来看看神马时候我们需要用到解析器。
1.自动调用parser
最主要的运用场景,只要我们书写相应的class,easyui就能成功的渲染页面,这是因为解析器在默认情况下,会在dom加载完成的时候($(docunment).ready)被调用,而且是渲染整个页面。
2.手动调用parser
需要手动调用的情况是:当页面已经加载完成,但是此时我们使用js生成的DOM中包含了easyui支持的class,并且我们也有将其渲染成easyui组件的需求。在这种情况下手动调用parser就不可避免了。
以如下代码为例:
<div class="easyui-accordion" id="tt"> <div title="title1">1</div> <div title="title2">2</div> </div>
当上述代码的生成在easyui渲染界面之后,由于easyui不会一直监听页面,所以该段代码并不会并渲染成“手风琴DIV”的样式,这时候就需要我们手动去结下了。不过这里需注意如下方面,上面也有提及。
- 解析目标位指定DOM的所有子孙元素,不包好该DOM本身。因此正确的写法为:
$parser.parser($('tt').parent());
并非:
$parser.parser($('tt'));
- 尽量不要多次解析同一个DOM元素(ID),页面初始化就已经主动渲染过dom节点了,你再次手动解析该dom节点时该dom已经被parser重构,得到的DOM就并非是你料想的结果,该方式应该尽量避免。
附:
1.layout中必须存在center,但如果layout只存在center,不如直接用panel;
2.所有easyui的数据型控件,都应该放在easyui的容器组件中。如datagrid的父级应该是panel;
3.fit是根据父级容器撑满,效果不理想的时候记得找一下他爹;
4.easyui的容器组件,用html初始化更好,而数据控件,则一律用js初始化,可控性更好
