2010-05-26 4 views
0

Ce que j'ai est un seul menu dijit.Menu qui contient les objets dijit.MenuItem avec des étiquettes 1 - 9. Il est connecté à une grille de type sudoku de 81 'noeuds' (parce qu'il y en a tellement, je ne m'occupe pas des id individuels, je les collectionne simplement avec dojo.query ('leur-nom-classe-css')). C'est le code que j'utilise à l'intérieur d'un widget pour instancier le menu contextuel et ses éléments de menu.Dojo Popup Menus - Connectez un événement d'élément de menu à plusieurs éléments 'triggering'

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(); 

Ce que je suis en train de faire est d'avoir le nœud qui est cliqué, et ouvre ensuite un menu contextuel/contexte, être rempli de la valeur (1-9) choisis parmi les MenuItems du menu contextuel.

Mon problème est que je ne sais pas comment « savoir » qui des 81 noeuds a été le seul à déclencher l'événement oncontextmenu, et je ne sais pas comment référencer ce noeud dans la méthode « onClick » déclarée dans la élément du menu.

Toute aide démontrant comment référencer le nœud appelant dans ce contexte serait appréciée! Si ce n'est pas assez d'information, laissez-moi savoir ce que je peux faire d'autre pour expliquer mon problème!

Répondre

0

evt.target devrait vous obtenir le nœud qui a été effectivement cliqué. Selon la structure, vous devrez peut-être effectuer une autre navigation à partir de là ou utiliser dijit.getEnclosingWidget(). Si les éléments MenuItems permettent aux événements de faire des bulles (je ne suis pas sûr, je ne les ai pas utilisés moi-même), vous pouvez vous connecter à la méthode onClick() du Menu, donc vous avez seulement l'écouteur d'événement unique en jeu .

+0

Eh bien, le problème reste que je veux que le onClick se produise quand je sélectionne l'élément de menu. Le evt.target est le menuItem lui-même et le widget qui l'entoure est le menu ... aucun de ceux qui me donne un moyen d'accéder au nœud qui a été cliqué (que je connais) ... – Dfowj

+0

Le nœud sur lequel vous avez cliqué sera un nœud interne du modèle MenuItem, vous risquez de ne pas obtenir ce que vous attendez. Cependant, vous pouvez choisir dojo.connect à l'événement DOM 'onclick' (N.B. pas 'onClick' qui est une méthode de widget) à la place donc vous avez l'événement à inspecter? Vous devrez peut-être créer un lien vers un exemple de cette grille que vous avez décrite car je ne peux pas tout à fait l'imaginer. –