IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Affichage du menu ça marche pas sur une grid


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Affichage du menu ça marche pas sur une grid
    Salut,
    J'ai un formulaire où j'ai créé mon grid avec un menu come ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <span dojoType="dojo.data.ItemFileWriteStore"
      data='<?php echo htmlentities($this->donneeGrid, ENT_QUOTES) ?> '
      jsid="gridStore">
    </span>
    <div style="float: left">
      <table dojoType="dojox.grid.DataGrid" store="gridStore" jsid="grid" id="grid" 
        onSelected="getGridActif"
        clientSort="true"
        postCreate = "getStructureGrid"
        onRowDblClick="editer()"
        onRowContextMenu="clickDroit()"
      >
        <thead>
    	  <tr>
            <th field=Label width="150px">cle</th>
            <th field=IDAttribut width="150px">valeur</th>
    	</thead>
      </table>
    </div>
    <div dojoType="dijit.Menu" id='monMenu'  targetNodeIds="grid" contextMenuForWindow="false"
    style="display: none;">
      <div dojoType="dijit.MenuItem" onClick="supprimer();">supprimer</div>
    </div>
    Le menu de grid s'affiche correctement lors de chargement de ma page même si j'ai pas attaché le menu a mon grid (ce qui m' apparait bizarre).
    Mais le problème se manifeste lorsque je clique sur un boutton qui m'affiche le même grid alors là le menu s'exécute pas sans me donner aucune erreur dans le console, quand je clique droit sur un item du grid il m'affiche rien.
    S'il vous plait aidez moi de résoudre ce beug
    Sachant que j'appel une fonction js dans la doubleClick sur le grid qui me permet de vérifier si l'item est bien sélectionné ou pas dont voici le teneur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function clickDroit(e) 
    {
        var idx = e.rowIndex;
        var selected = grid.selection.isSelected(idx);
     
        if(!selected)
            grid.selection.select(idx);
    }

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    La gestion des menus sur la grid se fait dans la douleur. C'est pourquoi il existe à partir de la 1.4 une grid étendue (dojox.grid.EnhancedGrid) qui gère en standard les menus utilisateurs sous la forme d'un plugin.

    Au passge tu gagnerais aussi en rapidité si tu instanciais ton store sous la forme de javascript plutôt qu'avec une balise inline qu'il faudra parser... D'autant que tu disposes des données.


    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Je me permets de poster ici car j'ai moi même quelques soucis avec les menus dans la datagrid.
    Je vais donc regarder la enhancedgrid.

    Cependant, un petite question tout de même concernant le datastore car je fais comme hasnaa1988 pour les associer à une grille.
    Emmanuel tu parles d'une balise inline pour gagner en rapidité.
    C'est quoi ?
    Merci d'avance pour ta réponse.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    Bonjour,

    Je pense que la balise inline c'est le fait de creer une balise html avec l'itemFileWriteStore et donc de creer un lien entre :

    l'ItemFileWriteStore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <span dojoType="dojo.data.ItemFileWriteStore"
      data='<?php echo htmlentities($this->donneeGrid, ENT_QUOTES) ?> '
      jsid="gridStore">
    </span>
    et le grid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <table dojoType="dojox.grid.DataGrid" store="gridStore" jsid="grid" >id="grid"
    Si la génération se fait pas javascript au chargement de la page, il se pourrait que cela fasse gagner en rapidité. Je ne peux pas confirmer, je fais comme vous :p

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // our test data store for this example:
        var store4 = new dojox.data.CsvStore({
            url: '/moin_static163/js/dojo/trunk/dojox/grid/tests/support/movies.csv'
        });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // create a new grid:
            var grid4 = new dojox.grid.DataGrid({
                query: {
                    Title: '*'
                },
                store: store4,
                clientSort: true,
                rowSelector: '20px',
                structure: layout4
            },
            document.createElement('div'));
     
            // append the new grid to the div "gridContainer4":
            dojo.byId("gridContainer4").appendChild(grid4.domNode);
     
            // Call startup, in order to render the grid:
            grid4.startup();
    Exemple trouvé sur le site http://docs.dojocampus.org.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Points : 47
    Points
    47
    Par défaut
    Ah ok, si c'est effectivement ça, je connaissais déjà.
    C'est le terme balise inline qui m'a interpelé. je pensais que c'était une autre méthode que celle que tu cites.

    Merci pour la réponse en tout cas.

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Concernant la balise "inline", ce que je voulais dire exactement (et que je reprends dans mon excellent article sur les stores ) c'est que si on connait les données du store, il vaut mieux directement faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var gridStore = new dojox.data.ItemFileReadStore({
        data:'<?php echo htmlentities($this->donneeGrid, ENT_QUOTES) ?> '
    });
    plutôt que passer par une balise que dojo devra parser. Le pire (en terme de performances) étant d'avoir les données, et de mettre une balise avec une URL référençant les données, car dans ce cas Dojo doit parser la balise, et en plus générer un aller-retour vers le server pour obtenir les données qu'il faut ensuite intégrer.

    C'est comme tout, selon le contexte cela peut être transparent (1 fois 10ko de donnée sur un intranet), ou pénalisant (10 fois 10 ko de données sur internet). Et c'est du vécu.

    ERE
    Quand une tête pense seule, elle devient folle.

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2010
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 322
    Points : 535
    Points
    535
    Par défaut
    J'ai essayé plusieurs fois de faire avec cette méthode mais je recois toujours "une erreur est survenue" sur le datagrid.
    Je ne comprends pas d'ou vient le soucis. Quand j'affiche mes données, elles sont bien au format Json.

    Petit détail, tu as mis un égal "=" et i lfaut des deux points ":" ^^

    Edit : Bon bah c'est bon j'ai trouvé. Une histoire de quotes évidemment

Discussions similaires

  1. Executable C# ne marche pas sur une autre machine
    Par clakinette dans le forum C#
    Réponses: 10
    Dernier message: 25/01/2010, 22h33
  2. [Dojo] push ca marche pas sur une variable de classe ?
    Par Zineb1987_UNI dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 14/12/2009, 10h12
  3. Réponses: 1
    Dernier message: 04/11/2009, 15h33
  4. Réponses: 8
    Dernier message: 23/06/2007, 10h38
  5. DATEDIFF() qui ne marche pas sur une version 5.0.xx
    Par vallica dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/05/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo