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 :

Récupération de données fausses des items du store


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Récupération de données fausses des items du store
    Bonjour à tous,

    mon problème est le suivant :

    J'ai développer un backend qui permet au client de gérer l'arborescence du site(pas de problème de ce coté la), ainsi que tous ces documents uploadés grâce à dojo et ces jolies petites listes en drag & drop.

    Lors du drag&drop des documents je demande à dojo de poster les items et leur position en ajax, un php les récupèrent et les rentrent en base.

    Le problème survient lorsque je change de liste de document. Dojo garde en mémoire la liste d'avant que j'ai utiliser dans l'état ou elle as marcher, et rien n'y fait les données ne change pas malgré que je change de liste, la premiere liste utiliser reste celle en mémoire.

    Y a-t-il un problème de cache ? Je patine depuis un moment, si quelqu'un à déjà été confronter à ça qu'il se manifeste !

    Voila le HTML de la partie contenu qui gère ça.

    Code html : 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
    <div id="cms_admin_cms_document_dialog" style="display: none;">
    </div>
     
    <div dojoType="dijit.layout.BorderContainer" gutters="false" style="width:100%; height: 100%">
     
      <ul dojoType="dijit.MenuBar" region="top">
        <li dojoType="dijit.MenuItem" iconClass="cmsIcon cmsMenuBarItemIcon cmsNewIcon">
          <script type="dojo/method" event="onClick" args="event">
            cmsAdminCmsDocumentDialog.set('title', 'Nouveau document');
            cmsAdminCmsDocumentDialog.set('href', '<?php echo url_for('cms_admin_cms_document_create', array('cms_module_id' => $cms_module->id)) ?>');
            cmsAdminCmsDocumentDialog.show();
          </script>
          Nouveau
        </li>
      </ul>
     
      <div dojoType="dijit.layout.ContentPane" region="center" gutters="false" style="padding: 8px 0 0 0;">
        <div id="cms_admin_cms_document_grid">
        </div>
      </div>
     
    </div>

    Voila le Javascript qui gère ça.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    <script type="text/javascript">
      dojo.require('dojox.grid.EnhancedGrid');
      dojo.require('dojox.grid.enhanced.plugins.DnD');
      dojo.require('dijit.form.Button');
     
      var
        cmsAdminCmsDocumentStore,
        cmsAdminCmsDocumentGrid,
        cmsAdminCmsDocumentGridHandler,
        cmsAdminCmsDocumentDialog;
     
      dojo.declare('clientCmsAdminCmsDocument.data.ItemFileWriteStore', dojo.data.ItemFileWriteStore, {
        clearOnClose: true,
        save: function(saveCompleteCallback, saveFailedCallback) {
          var
            i, data, itemData;
          // Modified Items
          data = [];
          for (i in this._pending._modifiedItems) {
            item = this._itemsByIdentity[i];
            itemData = {};
            dojo.forEach(this.getAttributes(item), dojo.hitch(this, function(attribute){
              itemData[attribute] = this.getValue(item, attribute);
            }));
            data.push(itemData);
          }
          if (data.length > 0) {
            dojo.xhrPost({
              url: this.url,
              content: {
                sf_method: 'put',
                data: dojo.toJson(data)
              }
            });
          }
          // Deleted Items
          data = [];
          for (i in this._pending._deletedItems) {
            itemData = {id: i};
            data.push(itemData);
          }
          if (data.length > 0) {
            dojo.xhrPost({
              url: this.url,
              content: {
                sf_method: 'delete',
                data: dojo.toJson(data),
              }
            });
          }
     
        }
      });
     
      cmsAdminCmsDocumentStore = new clientCmsAdminCmsDocument.data.ItemFileWriteStore({
        url: '<?php echo url_for('cms_admin_cms_document_store', array('cms_module_id' => $cms_module->id)) ?>'
      });
     
      cmsAdminCmsDocumentGrid = new dojox.grid.EnhancedGrid(
        {
          store: cmsAdminCmsDocumentStore,
          rowSelector: '20px',
          selectionMode: 'single',
          canSort: false,
          plugins: {
            dnd: {
              dndConfig: {
                col: false,
                cell: false,
                in: false,
                out: false
              }
            }
          },
          structure: [{
            defaultCell: {
              width: 'auto'
            },
            rows: [
              {
                field: 'label',
                name:  'Label'
              },
              {
                field: 'is_active',
                name:  'Actif',
                width: '40px',
                formatter: function(value) {
                  return value ? '<?php echo image_tag('/cmsPlugin/images/icons/is_active_small.png') ?>' : '';
                }
              },
              {
                name:  'Actions',
                field: '_item',
                width: '90px',
                formatter: function(item) {
                  return new dijit.form.Button({
                    label: 'Supprimer',
                    onClick: function() {
                      cmsAdminDialogConfirmation(function(){
                        cmsAdminCmsDocumentStore.deleteItem(item);
                        cmsAdminCmsDocumentStore.save();
                      });
                    }
                  });
                }
              }
            ]
          }],
          onRowDblClick: function(event) {
            cmsAdminCmsDocumentDialog.set('title', 'Document - ' + this.store.getValue(this.getItem(event.rowIndex), 'label'));
            cmsAdminCmsDocumentDialog.set('href', this.store.getValue(this.getItem(event.rowIndex), 'cms_admin_update_url'));
            cmsAdminCmsDocumentDialog.show();
          }
        },
        'cms_admin_cms_document_grid'
      );
     
      cmsAdminCmsDocumentDialog= new dijit.Dialog({}, 'cms_admin_cms_document_dialog');
     
      if (!cmsAdminCmsDocumentGridHandler) {
        cmsAdminCmsDocumentGridHandler = dojo.subscribe('dojox/grid/rearrange/move/cms_admin_cms_document_grid', cmsAdminCmsDocumentGrid, function(type, mapping){
          // Re-order items by position
          var i;
          for (i=0; i<this.rowCount; i++) {
            this.store.setValue(this.getItem(i), 'position', i + 1);
          }
          this.store.save();
        });
      }
     
    </script>

  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 Erreur de redéfinition du Save
    Salut,

    Tu redéfinis la méthode save du store: c'est une erreur de procéder ainsi car la méthode originale réinitialise les tableaux, dont les fameux _pending que tu manipules. C'est donc normal que rien ne chnage entre deux de tes appels.

    Tu dois créer une fonction _saveCustom dans ton Store personnel, dojo appelant alors dasnle save:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     this._saveCustom(saveCompleteCallback, saveFailedCallback);
    A toi d'appeler une des deux fonctions de callback selon la réussite ou l'échec de ta sauvegarde. saveCompleteCallback réinitialise les tableaux de _pendings:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	var saveCompleteCallback = function(){
    			self._pending = {
    				_newItems:{},
    				_modifiedItems:{},
    				_deletedItems:{}
    			};
    ...
    ERE
    Quand une tête pense seule, elle devient folle.

Discussions similaires

  1. [XL-2010] Récupération de données dans des classeurs Excel fermés
    Par Ikes72000 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 30/03/2017, 17h24
  2. Récupération de données à partir des fichiers bruts
    Par grinder59 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 23/07/2007, 14h44
  3. Réponses: 2
    Dernier message: 29/08/2006, 20h56
  4. Réponses: 12
    Dernier message: 20/04/2006, 14h23
  5. problème récupération de données dans des fichiers .DAT
    Par indymontpellier dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/04/2006, 07h54

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