【问题标题】:Is there a way to get a Dojo Dialog to popup from a PopupMenuItem to the left?有没有办法让 Dojo 对话框从左侧的 PopupMenuItem 弹出?
【发布时间】:2012-06-10 04:12:37
【问题描述】:

我使用的是 Dojo 1.6.1 版。我正在构建一个菜单,其中包含一个对话框 dijit 作为 PopupMenuItem 的弹出窗口。但是,如果菜单停靠在应用程序的右侧,则此方法有效,我需要将弹出窗口显示在菜单的左侧。我似乎无法让它工作。如果我使用另一种类型的小部件(如 ColorPalette),则效果很好。使用弹出子菜单和弹出式调色板,如果菜单位于屏幕右侧,则所有内容都向左打开,如果菜单位于屏幕左侧,则所有内容都向右侧打开。 Dojo 只是自动处理这个问题。但是对于任何 Dialog 小部件,即使是空的,它总是会弹出到 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>

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

【问题讨论】:

    标签: menu dojo dialog popup


    【解决方案1】:

    找到当前光标位置的方法

    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 应用到您的 Dialog。

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

    【讨论】:

    • 我玩了一下dijit.popup.open,但并没有完全成功。你是说我会指定 PopupMenuItem 的 popup 属性并执行 dijit.popup.open 吗?我认为我尝试的只是使用 MenuItem 并调用 dijit.popup.open 以响应单击事件,但它没有正确定位。我试试看。
    • 我对此没有任何运气。您能否更明确地说明我何时调用 dijit.popup.open?正如您所料,用于构建菜单的 JavaScript 在页面首次加载时运行,但用户在单击 menuItem1 之前不会看到弹出窗口。我尝试将对 dijit.popup.open 的调用放入 onClick 处理程序中,但它仍然显示在与以前相同的位置,大概是因为它仍然在 PopupMenuItem 的 popup 属性中指定。如果您能澄清您的建议,我仍然无法解决。
    • @PaulAngelno 您是否尝试调用 MenuItem 的 getXY() onClick
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多