很久没写东西了,以前发表的文章也大多都是转载的,前段时间看到一篇文章,说开发人员为什么不喜欢写技术博客,感觉挺有感触的,大多数原因是解决了就该忙其他的事情了,不去管这些东西了,还有就是怕不够深入,写的不对,让人笑话。
最近几天接到任务要解决一个DOJO中dialog的BUG,感觉弄了好几天很烦躁,也许是我技术比较烂,高手应该很容易解决,但是我希望能记录下来,能给同样碰到问题的人一些帮助,这样码的那么多字就不算白费。
dialog是自带遮罩功能的,但是我们在使用的时候,有可能不需要遮罩这个东西,怎么把它去掉呢?如果使用的是dojox的dialog,modal属性直接可以去掉遮罩,但是DOJO1.7以后推荐使用DialogSimple,因为它继承了ContentPane。但是却没有了modal属性,怎么办? 有几种办法:
1. dojo.byId("id").childNodes[0].style.display="none"; id是在页面上遮罩的id,可以都过firebug看到
2.dojo.destroy('id'); id是你生成dialog的id
3.dijit._underlay.hide();
4.dijit._underlay.domNode.style.display = "none";
第一种肯定不是最好的办法,因为id这个东西不是固定的,并且很有可能是系统自动生成的。第二种会出现新的问题,因为当你页面中存在很多个dialog时,他们都是共用一个遮罩的,这样其他的dialog如果还想使用遮罩就是不可能的了。第三种是我在网上看到的办法,但是很遗憾,会报错,原因找到了,是因为hide的时候有这一句this.bgIframe.destroy(),但是你关闭dialog时调用的hide方法又会销毁一次bgIframe,会显示找不到bgIframe。所以我进入了DialogUnderlay中的hide方法,发现主要的代码就是第四种方法!如果想要显示就使用dijit._underlay.domNode.style.display = "block",是不是完美解决了?