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
4 réponses
je pense que ce serait une meilleure solution :
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
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});
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.