Dojo Popup Menus - Подключите событие пункта меню к нескольким «запускающим» элементам - PullRequest
0 голосов
/ 27 мая 2010

То, что у меня есть - это один dijit.Menu, который содержит объекты dijit.MenuItem с метками 1 - 9. Он связан с сетью, похожей на судоку, из 81 'узлов' (потому что существует очень Я не беспокоюсь об отдельных идентификаторах, я просто собираю их с помощью dojo.query («их-css-имя-класса»)). Это код, который я использую внутри виджета для создания экземпляра контекстного меню и его пунктов меню.

    var contextMenu = new dijit.Menu({targetNodeIds:dojo.query(".sudokuNode"), leftClickToOpen:true});

    for(var i = 1; i <= 9; i++) {
        contextMenu.addChild(new dijit.MenuItem({
            label:i,
            onClick: function(evt) {
                //??
            }
        }));
    };

    contextMenu.startup();

То, что я пытаюсь сделать , это иметь узел, по которому щелкают, а затем открывает всплывающее / контекстное меню, заполняемое значением (1-9), выбранным из контекстных меню MenuItems.

Моя проблема заключается в том, что я не знаю, как «узнать», какой из 81 узлов вызвал событие oncontextmenu, и я не знаю, как ссылаться на этот узел внутри метода «onClick». заявлено в пункте меню.

Буду признателен за любую помощь, демонстрирующую, как ссылаться на вызывающий узел в этом контексте! Если этой информации недостаточно, дайте мне знать, что еще я могу сделать, чтобы объяснить мою проблему!

1 Ответ

0 голосов
/ 27 мая 2010

evt.target должен получить узел, который был фактически нажат. В зависимости от структуры вам может потребоваться выполнить какую-то другую навигацию или использовать dijit.getEnclosingWidget().

Если MenuItems позволяют событиям пузыриться (я не уверен; я не использовал его сам), вы можете подключиться к методу onClick() в Menu, так что вы получите только один прослушиватель событий в играть.

...