Bonjour à tous,
Je dois développer avec ExtJS une simple grille avec possibilité de sélectionner les lignes avec des cases à cocher. J'ai donc créé un Ext.grid.Panel avec comme selModel un Ext.selection.CheckboxModel comme ceci :
Quand l'écran s'affiche pour la première fois, tout fonctionne parfaitement. Mais là où ça se complique, c'est quand je vais ailleurs et que je reviens sur mon écran : la sélection se met à faire n'importe quoi (les éléments sélectionnés se déplacent tout en bas de ma grille) et l'événement de sélection n'a plus aucun effet sur mon bouton de suppression (comme si Ext.getCmp("boutonSuppression").setDisabled agissait sur une ancienne référence).
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 var monSelectionModel = Ext.create("Ext.selection.CheckboxModel", { checkOnly: false, mode: "MULTI", showHeaderCheckbox: true }); var maGrille = new Ext.grid.Panel({ ... listeners: { /** * Au moment où la sélection change, je veux activer/désactiver le bouton de suppression dans la barre d'outils. * @param me : le modèle de sélection courant. * @param selected : la sélection. * @param options : options supplémentaires liées à l'événement. */ selectionchange: function(me, selected, options) { Ext.getCmp("boutonSuppression").setDisabled(selected.length === 0); } }, selModel: monSelectionModel, ... });
Je me suis documenté sur la notion de prototypes apportée par la version 4 d'ExtJS avec cet article, article qui m'a fait comprendre qu'il fallait déclarer mon selectionModel non pas directement avec la propriété selModel de ma grille mais en dehors (sauf que déclarer mon selectionModel en dehors a induit ce fameux bug d'affichage de déplacement des éléments sélectionnés en bas de ma grille).
Deux questions donc :
- comment résoudre ce bug d'affichage des éléments sélectionnés qui se "déplacent" tout en bas de ma grille ?
- comment faire fonctionner mon listener correctement ?
En espérant avoir été clair dans la description de mon problème (pas évident ^^), merci d'avance pour vos réponses.
Partager