Je n'arrive pas à régler/supprimer manuellement l'indicateur "indicateur sale" sur le contrôle de grille Kendo.Le drapeau "sale" de la grille ne se met pas à jour
J'ai étendu le tutoriel pour preserve dirty indicators d'inclure une validation supplémentaire sur le terrain value
lors de l'événement dataSource.change
:
- A précédemment enregistré
value
(qui contient unid
) qui a été modifiée pour être 0 - ce est valide "drapeau sale" (e.items[0].id > 0 && e.items[0].value === 0
) - a
value
a été conclu avec une valeur supérieure à 0 - ce est valide « sale drapeau »(e.items[0].value > 0
) - Toute autre instance de
value
n'est pas valide « » devrait être supprimée et donc - Si l'utilisateur a quitté le champ
value
« drapeau sale, modifier la valeur » ie « null » vide à 0 (if (!e.items[0].value) {e.items[0].value = 0;}
)
Avec ces modifications appliquées, l'événement change
ressemble maintenant:
change: function (e) {
if (e.action == "itemchange") {
if ((e.items[0].id > 0 && e.items[0].value === 0) || e.items[0].value > 0) {
e.items[0].dirtyFields = e.items[0].dirtyFields || {};
e.items[0].dirtyFields[e.field] = true;
_dirty = true;
}
else {
if (!e.items[0].value) {
e.items[0].value = 0;
}
e.items[0].dirty = false;
e.items[0].dirtyFields = e.items[0].dirtyFields || {};
e.items[0].dirtyFields[e.field] = false;
}
$("#grid").data("kendoGrid").refresh();
}
}
U pon faisant ces changements, je peux voir la fonction dirtyField
(qui est la template
de la colonne de valeur) étant déclenchée, et peut également voir les valeurs true
/false
appropriées étant fournies et le retour approprié prenant place (qui, je pensais, devrait placer/retirer le « drapeau sale » des cellules appropriées):
function dirtyField(data, fieldName){
if(data.dirty && data.dirtyFields[fieldName]){
return "<span class='k-dirty'></span>"
}
else{
return "";
}
}
Cependant, le « drapeau sale » ne soit pas éliminée jusqu'à ce qu'une autre cellule dans la grille est modifiée.
Voici un Dojo example pour illustrer le problème. Pour répliquer:
- Entrez une valeur supérieure à 0 dans la deuxième rangée
value
cellule (ensembles « drapeau sale ») - Supprimer la valeur de la deuxième rangée
value
cellule (« drapeau sale » reste -> devrait maintenant être parti basé sur la logique événementchange
) - Entrez une valeur supérieure à 0 dans la troisième rangée
value
cellule (ensembles « drapeau sale » sur la cellule actuelle, supprime « drapeau sale » de la deuxième rangéevalue
cellulaire)
Merci @sasha_gud, la démo fonctionne très bien. Pour une raison quelconque, je n'arrive pas à déclencher l'événement 'cellClose()' sur ma définition de grille. Savez-vous s'il s'agit d'un problème de versioning ('cellClose' disponible uniquement pour une version spécifique)/suite à un attribut de grille en conflit? ** EDIT ** Changé la version des contrôles sur la démo que vous avez envoyé pour correspondre à la mienne et il s'agit en effet de faire avec la version des contrôles. – Sandman