最近遇到一个奇怪的问题,项目使用EXTJS4.2,部分列表在 WIN8+IE10环境下,当列表出现横向滚动条时, 列表的遮罩层隐藏失败,列表会显示灰蒙蒙一遍,刷新也无效. 在WIN7环境下 IE9,IE10均无此问题.
在两个环境中对比调试ext-debug-all代码,发现出现问题代码位置大概为:遮罩层的代码
,
经调试 改callParent也是调用hide方法...由于时间比较赶,用了临时解决方法,针对WIN8和IE10的环境作出特别调整,重写了Ext.loadMask类
//判断IE及系统版本. windows8+IE10环境下,Ext的loadMask出现无法隐藏问题. 暂时使用本方法进行解决.
var hideMask = false;
try{
var dd = "";
var appV = navigator.appVersion;
var isWin8 = (appV.indexOf('Windows NT 6.2')!=-1);
/*@cc_on
dd = (@_jscript_version);
if(dd==10&&isWin8){
hideMask = true;
}
@*/
}catch(e){
alert(e)
}
然后重写 LoadMask的mabeShow方法
Ext.override(Ext.LoadMask, {
maybeShow: function() {
var me = this,
owner = me.getOwner();
if (!owner.isVisible(true)) {
me.showNext = true;
}
else if (me.loading && owner.rendered) {
me.show();
//如果windows8++及IE10++下取消EXT的grid遮罩初始显示.
if(hideMask){
me.hide();
}
}
}
});
主要添加的是这段代码: if(hideMask){
me.hide();
}
IE10并且WIN8下, 遮罩层出现后直接隐藏, 成功隐藏掉.对其它环境没影响
再手动添加grid的遮罩
qsGridMask = new Ext.LoadMask(Ext.getCmp('creditQsGrid').getView(), {
msg : "加载中...",
msgCls : 'z-index:10000;'
});
再给store添加监听方法,开启和隐藏遮罩. 好了,大功告成.
record_store = Ext.create(
'Ext.data.JsonStore',
{
fields: dataFields,
proxy: { type: 'ajax',
url : connObjUrl,
async:false,
getMethod: function(){ return 'POST'; },
reader: {
type: 'json',
root: 'rows',
totalProperty: 'total'
},
extraParams:{
dataProcess:dataProcess
}
},
listeners:{
'beforeload':function(){
qsGridMask.show();
},
'datachanged':function(){
qsGridMask.hide();
}
}
}
);