Nic*_*oss 3 javascript dojo dialog
我正在使用Dojo 1.6.1并且我想这样做,所以我可以通过单击对话框本身外部来关闭我的Dojo Dialog.经过研究,看起来最简单的方法之一是通过这样做:
var dij = dijit._underlay.domNode;
dojo.connect(dij, "onclick", function(e) {
dojo.query('[role="dialog"]').forEach(function(element) {
if (element.className.match("dijit")) {
if(element.id)
{
var widget = dijit.byId(element.id);
if(widget._isShown() === true)
{
widget.hide();
}
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为dijit._underlay回来说它是未定义的.我想要完成这个或者更简单的方法是什么?
更新我更新了有效的代码,但只有在我在我的一个对话框上调用.show之后它才有用,然后它就是所有的对话.看起来在至少显示一个对话框之前不会创建参考底图.
我觉得这很快就搞砸了.诀窍是,在第一次调用对话框的.show()之前,dijit._underlay不会被初始化.之后,它将重新使用dijit._underlay.但是,你可以在自己面前做同样的伎俩.所以,我检查dijit._underlay是否存在.但是,如果没有创建它,我会这样做,所有对话框都可以解决这个问题.所以,这是工作代码:
var dij = null;
if(dijit._underlay === undefined)
{
dijit._underlay = new dijit.DialogUnderlay();
}
dij = dijit._underlay.domNode;
dojo.connect(dij, "onclick", function(e) {
dojo.query('[role="dialog"]').forEach(function(element) {
if (element.className.match("dijit")) {
if(element.id)
{
var widget = dijit.byId(element.id);
if(widget._isShown() === true)
{
widget.hide();
}
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |