2016-09-21 2 views
3

Je me demandais s'il est possible de désactiver une ligne sélectionnée dans une grille ExtJS 6 avec cette configuration de selModel:Sencha modèle case grille ExtJS seul mode annuler la sélection

selModel: Ext.create('Ext.selection.CheckboxModel', { 
      mode: 'SINGLE', 
      checkOnly: 'true', 
      allowDeselect: true,        
}), 

J'ai le violon suivant qui montre la comportement que je suis actuellement confronté: https://fiddle.sencha.com/#fiddle/1h4l

Il semble que la seule façon de désélectionner une ligne est en sélectionnant une autre ligne, ce qui n'est pas ce dont j'ai besoin.

+0

Je ressemble à un bug. Je le signalerais sur le forum Sencha - le allowDeselect ne semble pas avoir d'effet. – pagep

+0

@pagep Je pensais aussi. Je vais soumettre le billet tout de suite. – hbulens

+0

@hbulens Oui j'ai essayé dans beaucoup de scénario possible à la grille mais allowDeselect ne fait aucun effet dans EXTJS 6, Son amende ExtJS 5. Son bogue. – UDID

Répondre

1

Ne pas créer directement le modèle de sélection; utilisez le xtype à la place. Changer le selModel à ce fonctionne comme prévu dans votre violon:

selModel: { 
    selType: 'checkboxmodel', 
    mode: 'SINGLE', 
    checkOnly: 'true', 
    allowDeselect: true    
}, 
+0

Cela fonctionne. Je vais garder le rapport de bogue ouvert car les deux approches devraient être équivalentes. J'ai utilisé la solution de contournement de Chandra Sekar mais celle-ci est une solution réelle. – hbulens

+0

Les deux approches ne sont pas équivalentes. Lorsque vous créez la case à cocher manuellement, vous ignorez un certain nombre d'étapes que la classe Ext.view.Table (utilisée par la grille) effectue lors de l'initialisation du modèle de sélection. Une bonne règle avec ExtJS est d'éviter de créer des objets directement s'il peut prendre un alias. –

0
selModel: Ext.create('Ext.selection.CheckboxModel', { 
     checkOnly: 'true', 
     allowDeselect: true,        
}), 

Si vous supprimez le mode: 'SINGLE', cela fonctionne correctement.

Si vous souhaitez sélectionner une ligne à la fois, vous devez cocher l'événement "beforeselect" si une autre ligne est sélectionnée ou non.

Vous pouvez obtenir le nombre de ceux vérifiés en utilisant:

var selectedRows = getSelectionModel().getSelection();