web-dev-qa-db-fra.com

ExtJS 4.x: Comment désactiver le coin rouge "dirty record" dans les cellules Ext.grid.Panel?

J'ai un Ext.grid.Panel (aka gridpanel) avec un magasin, utilisé uniquement pour les effets visuels côté client (c'est-à-dire que rien n'est enregistré sur le serveur). Lorsque je crée de nouvelles instances de modèle et les ajoute au magasin, elles sont affichées dans la grille avec un coin rouge (indiquant probablement que les modifications du magasin n'ont pas été enregistrées).

En ce moment, j'appelle la méthode .commit () sur chaque enregistrement/modèle avant qu'elle ne soit ajoutée au magasin pour éviter le coin rouge de l'enregistrement sale dans la grille.

Existe-t-il un moyen plus générique de simplement configurer un panneau de grille pour ne pas afficher d'indicateurs visuels concernant l'état "sale" d'un enregistrement?

Remarque: Les solutions de cette question similaire impliquent soit CSS soit ne fonctionnent que pour ExtJS 3. J'espère trouver un "paramètre" programmatique qui fonctionne pour ExtJS 4. =

35
Clint Harris

Sur la base des réponses ici et sur les forums Sencha, et après avoir regardé la source ExtJS, la réponse est essentiellement:

Non, il n'y a pas de moyen simple (au moins dans 4.0.7) pour configurer une grille pour ne pas afficher les coins rouges sans utiliser CSS.

Merci pour tout le brainstorming et les informations supplémentaires de tout le monde. Je lance ceci pour que quiconque rencontre cela à l'avenir puisse voir une "réponse" claire à ma question.

7
Clint Harris

Son fonctionne à nouveau dans ExtJS 4.1.1. Utilisez la propriété de configuration markDirty dans la vue de grille.

Lorsque vous avez un GridPanel, utilisez-le comme ceci:

viewConfig:{
    markDirty:false
}

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.View-cfg-markDirty

62
mesx

J'ai un formulaire avec une case à cocher qui représente simplement des données transitoires. Cocher la case marquerait la colonne sale, ce qui n'avait pas de sens pour ma cellule. Les autres colonnes avaient probablement besoin des marques sales si elles n'étaient pas synchronisées. Ma solution qui s'inspire de la réponse de @ Roman, mais avec plus de contrôle sur les colonnes qui recevront le traitement.

Dans la colonne config:

{
    xtype: 'checkcolumn',
    tdCls: 'no-dirty',
    dataIndex: 'selected',
    width: 50,
    text: 'Check'
},

Dans mon CSS

.no-dirty.x-grid-dirty-cell
{
    background-image: none;
}
4
David

Une option serait d'éviter d'utiliser un proxy distant et d'utiliser à la place un proxy de mémoire avec autoSync: true, puis de charger manuellement les données avec un appel Ext.Ajax.request.

Les proxys distants sont assez codés en dur pour savoir si les modifications ont été enregistrées sur le serveur ou non.

Si vous souhaitez garder une trace de leur enregistrement sur le serveur ou non, mais simplement supprimer l'indication visuelle avec les coins, utilisez CSS pour changer à quoi ressemblent les lignes "sales". Si vous souhaitez supprimer complètement ce suivi, n'utilisez pas de proxy distant.

4
The Mighty Chris

Ça marche! Mais c'est sale pour moi. Juste pour une solution rapide.

.x-grid-dirty-cell {
    background-image: none;
}
3
Roman Kostenko

J'ai une configuration similaire, avec un magasin qui est soutenu par un proxy localStorage. Lorsque j'obtiens un enregistrement sale dans une grille en utilisant ce magasin, j'utilise commitChanges() (ici depuis ExtJS 4.2.1) pour synchroniser le magasin avec la grille et ainsi supprimer le "sale" "marqueur.

2
Steen

Eh bien, j'ai la solution pour le sale dossier,

étapes à faire:

  • définir la propriété modifiée de l'enregistrement sur un objet vide;

    par exemple. record.modified = {};

  • Cela doit être fait avant d'appeler le loadRecords () d'ext, peut être dans le modèle ou le magasin (vous pouvez surcharger la méthode onProxyLoad () de Ext.data.Store)

correctifs:

  • la marque rouge d'enregistrement sale sera supprimée de la grille
  • flux de mise à jour: il ne passera que les champs modifiés en appel PUT (en chargement sale, il passe tous les champs)
1
exTdeV

En fait, il existe un autre moyen de corriger par programme (un hack non CSS) vérifié dans ExtJS 4.2

record.modified = {};

ou, plus précisément,

delete record.modified[fieldName]
1
johnwp

Essayez l'écouteur d'écriture en magasin à partir de l'exemple de la réponse à cette question: Proxy EXT JS Store: lecteurs et écrivains

0
dbrin