有没有办法让Dojo对话框从左边的PopupMenuItem弹出?

有没有办法让Dojo对话框从左边的PopupMenuItem弹出?,menu,dojo,dialog,popup,Menu,Dojo,Dialog,Popup,我使用的是Dojo版本1.6.1。我正在构建一个菜单,其中有一个对话框dijit作为PopupMenuItem的弹出窗口。但是,如果菜单停靠在应用程序的右侧,我需要弹出窗口显示在菜单的左侧,这是可行的。我好像没法让它工作。如果我使用另一种类型的小部件(比如颜色调色板),这很好用。使用弹出式子菜单和弹出式调色板,如果菜单位于屏幕右侧,则所有内容都向左打开;如果菜单位于屏幕左侧,则所有内容都向右打开。Dojo只是自动处理这个问题。但是对于任何对话框小部件,即使是空的,它总是会弹出到PopupMenu

我使用的是Dojo版本1.6.1。我正在构建一个菜单,其中有一个对话框dijit作为PopupMenuItem的弹出窗口。但是,如果菜单停靠在应用程序的右侧,我需要弹出窗口显示在菜单的左侧,这是可行的。我好像没法让它工作。如果我使用另一种类型的小部件(比如颜色调色板),这很好用。使用弹出式子菜单和弹出式调色板,如果菜单位于屏幕右侧,则所有内容都向左打开;如果菜单位于屏幕左侧,则所有内容都向右打开。Dojo只是自动处理这个问题。但是对于任何对话框小部件,即使是空的,它总是会弹出到PopupMenuItem的右侧,而不管菜单在屏幕上的什么位置。我认为指定dijit.Dialog的div的高度和宽度可能会解决这个问题,但事实并非如此

下面是代码的简化版本:

<div data-dojo-type="dijit.Menu" id="toolPalette" style="position:absolute; right:0; top:0; z-index: 999;">
</div>

<script>
    // Grab the div for the menu, declared in the HTML above.
    var toolPalette = dijit.byId("toolPalette");

    // This tool button has a popup
    var menuItem1 = new dijit.PopupMenuItem({
        id: "menuItem1",
        iconClass: "shelterIcon",
        popup: new dijit.Dialog()
    });
    toolPalette.addChild(menuItem1);

    // This tool button does not have a popup
    var menuItem2 = new dijit.MenuItem({
        id: "menuItem2",
        iconClass: "shelterIcon"
    });
    toolPalette.addChild(menuItem2);

    toolPalette.startup();
</script>

//抓取上面HTML中声明的菜单的div。
var toolplate=dijit.byId(“toolplate”);
//此工具按钮有一个弹出窗口
var menuItem1=new dijit.PopupMenuItem({
id:“menuItem1”,
iconClass:“谢尔特里康”,
弹出:新建dijit.Dialog()
});
toolPalette.addChild(menuItem1);
//此工具按钮没有弹出窗口
var menuItem2=新的dijit.MenuItem({
id:“menuItem2”,
iconClass:“shelterIcon”
});
toolPalette.addChild(menuItem2);
toolpette.startup();

非常感谢您的帮助!我已经尝试了我能想到的一切。

找到当前光标位置的方法

document.onmouseup = getXY;
var mouseX, mouseY;

function getXY(e) {
    mouseX= (e || event).clientX;
    mouseY= (e || event).clientY;
    if (document.documentElement.scrollTop > 0) {
        mouseY= mouseY+ document.documentElement.scrollTop;
    }
}
你的代码在这里

 var myDialog = new dijit.Dialog();
 var menuItem1 = new dijit.PopupMenuItem({
        id: "menuItem1",
        iconClass: "shelterIcon",
        popup: myDialog 
    });
现在将X和Y应用于对话框

dijit.popup.open({
    x: mouseX,
    y : mouseY,
    popup: myDialog 
 });

我玩了一下dijit.popup.open,但没有完全成功。你是说我要指定PopupMenuItem的popup属性并执行dijit.popup.open吗?我想我尝试的只是使用一个菜单项并调用dijit.popup.open来响应单击事件,但它没有正确定位。我试试看,我运气不好。你能更明确地告诉我何时调用dijit.popup.open吗?正如您所料,构建菜单的JavaScript在页面首次加载时运行,但在单击menuItem1之前,用户不应该看到弹出窗口。我尝试将对dijit.popup.open的调用放入onClick处理程序中,但它仍然显示在与以前相同的位置,可能是因为它仍然在PopupMenuItem的popup属性中指定。如果你能澄清你的建议,我仍然很困惑。@PaulAngelno你有没有试着调用菜单项的getXY()onClick