ExtJS 4 Modification de la grille de magasin à la volée

est-il possible de changer le magasin de grid dans ExtJS 4?

Par exemple, j'ai deux modèles:

User = Ext.define('User',{
  extend: 'Ext.data.Model',
  [...],
  hasMany: 'Product'
});

Product = Ext.define('Product',{
  extend: 'Ext.data.Model',
  [...]
});

et deux grilles. La première grille est liée à Store qui utilise User modèle et charge les données JSON imbriquées du backend, comme

{
  users: [{
     id: 1,
     products: [
       {id: 1},
       {id: 2}
     ]
  }, {
     id: 2,
     products: [
       {id: 3},
       {id: 4},
       {id: 5}
     ]
  }]
}

Tout ce que je veux obtenir, c'est quand vous cliquez sur la ligne de la première grille, la deuxième grille doit afficher les produits de l'utilisateur, sans connexion au serveur. Tout ce que je sais, c'est que user.products(); retourne un Ext.data.Store objet. De sorte que le l'idée est de modifier la deuxième grille du magasin user.products();, mais il n'y a pas une telle méthode grid.setStore() : -)

Merci d'avance

25
demandé sur sunsay 2011-05-04 17:25:19

4 réponses

je pense que ce serait une meilleure solution :

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );
35
répondu pllee 2011-08-15 16:31:04

vous regardez les magasins de la mauvaise façon. Un magasin est attaché à la grille pour toujours, donc il n'y a pas de grid.setStore(). Vous ne changez pas une mémoire pour une grille, mais vous changez les données dans la mémoire pour cette grille.

maintenant, solution à votre problème: Vous êtes correct avec la partie que vous avez déjà une instance de stocker vos données. ie;user.products(). Encore, vous devrez créer un magasin pour votre grille. Ce magasin n'aura cependant pas de données. Maintenant, quand vous en avez besoin pour affichage des informations produits, vous devez charger le magasin de la grille avec des données. Vous pouvez utiliser:

  • load ()
  • loadData ()
  • loadRecord ()

pour charger les données dans votre magasin. Dans votre cas, vous pouvez effectuer les opérations suivantes:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
20
répondu Abdel Raoof 2011-05-04 16:30:26

si vous voulez attacher un magasin à une grille Après que la grille ait été créée, vous pouvez utiliser le bindStore () méthode.

var store = user.products();
grid.getView().bindStore(store);

Vous pouvez aussi utiliser les méthodes load(), loadData(), loadRecords (), et copier les données dans votre magasin.

9
répondu Sasha Brocato 2013-06-18 20:56:49

la réponse D'Abdel Olakara m'a aidé quand j'avais besoin de mettre à jour des données sur quelque chose qui n'avait pas reconfigure (custom classe héritant de