2010-02-03 6 views
2

J'essaye de faire fonctionner le menu contextuel du navigateur à l'intérieur d'un dojox.grid.DataGrid. Quand je fais un clic droit sur la grille maintenant, rien ne se passe. J'ai essayé de surcharger onCellContextMenu, onRowContextMenu, doContextMenu, et oncontextmenu avec des fonctions vides sur l'instance de la grille, mais cela n'a pas fonctionné. La méthode onCellContextMenu est appelée en cliquant dessus avec le bouton droit de la souris, mais n'affiche toujours pas de menu contextuel. Je pense que l'événement est arrêté à un autre niveau, mais je ne suis pas sûr de savoir où chercher.Comment activer le menu contextuel du navigateur dans dojox.grid.DataGrid?

La grille contient une liste de liens, et je souhaite que les utilisateurs puissent cliquer avec le bouton droit de la souris sur les liens afin de pouvoir les ouvrir dans un nouvel onglet. Je sais que je peux faire un menu contextuel personnalisé pour fournir cette fonctionnalité, mais j'aimerais savoir comment désactiver ce comportement à l'avenir.

Répondre

4

Je sais que ce peut-être un peu en retard, mais j'ai rencontré le même problème et j'ai trouvé une solution en étudiant le code source et en interrogeant le chat de la communauté dojo. La solution consiste à créer un widget Grille personnalisée qui a les modifications suivantes:

  1. Créez un _FocusManager personnalisé que votre grille personnalisée utilisera, où la seule mise à jour supprime la fonctionnalité de la méthode doContextMenu qui exécute un dojo.stopEvent par défaut - //extension to remove contextmenu dojo.stopEvent dojo.declare('myGrid.dojox.grid._FocusManager', dojox.grid._FocusManager, { doContextMenu: function() {} });

  2. retirez les callbacks d'origine dans la grille qui exécutent dojo.stopEvent par défaut:

    // supprimer les callbacks originaux qui appellent stopEvent

    onRowContextMenu: function(e) {}, 
    onHeaderContextMenu: function(e) {} 
    

Voici un exemple que l'on m'a donné à la discussion communautaire: http://jsfiddle.net/kfranqueiro/SqYXd/

+1

En ce qui concerne cette solution: "Voici un exemple de travail qui m'a été donné lors de la discussion communautaire: http://jsfiddle.net/kfranqueiro/SqYXd/": cela fonctionne bien avec Dojo Datagrids. Malheureusement, ce n'est pas le cas pour EnhancedGrids (la liaison est conservée sur la grille, donc même si vous ne liez aucun menu Dijit sur la grille, le menu du navigateur n'apparaîtra toujours pas). Toute solution "améliorée" pour cela? ... A.R. –

0

Je sais que ce n'est pas exactement la solution que vous voulez pour afficher le menu contextuel, mais avez-vous essayé d'indiquer Ctrl-leftClick sur ces liens plutôt que de cliquer avec le bouton droit pour afficher le menu contextuel?

+0

Ouais, c'est là où nous sommes maintenant, mais ce n'est pas une bonne solution. – Alex

0

Vous devez créer un dijit.menu dans un div et définir son affichage sur none. Voici un exemple où le menu contextuel et la grille sont contenues dans un ContentPane de dijit:

<div dojoType="dijit.layout.ContentPane" title="MyGrid"> 
    <div id="myGridContainer" style="width:100%;height:100%"></div> 
    <div id="myGridContextMenu" dojoType="dijit.Menu" style="display: none;"> 
     <div dojoType="dijit.MenuItem" id="myGridContextMenu.delete" onClick="deleteItem">Delete</div> 
    </div> 
</div> 

Vous devrez également connecter le menu à votre grille lors de sa création:

var myGrid = new dojox.grid.DataGrid({ ..., onRowContextMenu: myGridcontextMenu },...); 
+0

Je n'arrive pas à faire fonctionner cela, il n'affiche toujours pas de menu contextuel. – Alex

+0

Je pense que j'ai peut-être mal compris votre question. Vous voulez que le menu Firefox/chrome/IE apparaisse avec le contexte, comme sur une image par exemple? Plutôt que de vous accrocher. Alors le traiter comme un autre lien sur la page? –

Questions connexes