2017-09-20 2 views
0

J'ai une grille de kendo avec l'édition en ligne. Je veux être en mesure de rendre l'une des cellules de la rangée modifiable si une autre cellule de la rangée est cochée. Si ce n'est pas vérifié, je veux que la cellule soit en lecture seule.Rendre la cellule de grille de kendo modifiable ou en lecture seule en fonction de l'état de l'autre cellule

Mes colonnes ressemblent à ceci:

columns: [ 
    { field: "Title" }, // string 
    { field: "Body" }, // string 
    { field: "IsCalculated", template: "#= IsCalculated ? 'Yes' : 'No' #" }, // boolean 
    { field: "Expression" } // string 
] 

Si Calculated est cochée alors je veux Expression pour être modifiable, sinon, je veux qu'il soit en lecture seule.

J'ai regardé la configuration docs pour la grille de kendo et je l'ai expérimenté avec la fonction columns.editable mais comme cela est expliqué dans la documentation: « La fonction JavaScript exécutée lorsque la cellule/ligne est sur les à ouvrir pour modifier. Le résultat renvoyé déterminera si un éditeur pour la colonne sera créé. "

Je peux utiliser cette fonction pour déterminer si la cellule doit être éditable ou en lecture seule avant son ouverture, mais je veux pouvoir la changer pendant que la cellule est ouverte pour l'édition et la case Calculated est cochée ou non cochée.

+0

Je devine que vous Il faudra probablement faire deux choses: 1) Utiliser la fonction que vous avez décrite pour empêcher la modification de la cellule si la case n'est pas cochée et 2) Surveiller les changements et éventuellement appeler la fonction closeCell de la grille si la case n'est pas cochée pas sûr de ce que vous voulez avoir à n'importe quelle valeur entrée à ce moment-là) – Onite

Répondre

0

Essayez prévenir l'événement edit avec cancelRow():

edit: function(e) { 
    if (!e.model.IsCalculated && 
     $(e.container).find('input').attr("name") == "Expression") 
    { 
     this.cancelRow(); 
    } 
} 

Demo

MISE À JOUR - meilleure condition:

if (!e.model.IsCalculated && 
    $(e.container).find('input[name="Expression"]').length) // <--- 

Demo