Tengo una cuadrícula de Kendo con botones de fila que escondo dependiendo de los usuarios que acceden a la página: para ciertos usuarios, solo el botón "Editar" será visible, mientras que para otros los botones "Eliminar" y "Agregar" serán visibles. Hago esto con una función que, después de verificar el usuario y sus permisos, oculta los botones como este:
$("#grid").find(".k-grid-delete").hide(); $("#grid").find(".k-grid-edit").show(); $("#grid").find(".k-grid-add").hide();Esto funciona bien, pero si un usuario con solo el botón Editar visible hace clic en Editar y luego hace clic en el botón Cancelar, la cuadrícula se restaura a "normal" y todos los botones son visibles. Intenté interceptar el evento "Cancelar" y llamar a la función que oculta los botones allí, pero aparentemente se vuelve a dibujar la cuadrícula DESPUÉS de que finaliza el evento de cancelación. Lo intenté con el enlace de datos, pero el enlace de datos no se genera cuando se cancela la acción. Necesito interceptar un evento que ocurre después de hacer clic en "Cancelar" y antes de que se vuelva a dibujar la cuadrícula.
¿Algunas ideas?
Al final, fue más sencillo construir la barra de herramientas y las opciones de comando con una función que eliminar condicionalmente ciertos botones después de construir la cuadrícula. Es decir, en la función de definición de cuadrícula de kendo:
var grid = $("#grid").kendoGrid({ dataSource: dataSource, toolbar: setToolbarCreateButton(), columns: [ { field: "COL1" }, { field: "COL2" }, { field: "COL3" }, { command: setCommandRow(), title: " ", width: "250px" } ], (rest of configuration here) });Y en las funciones setCommandRow() y setToolbarCreateButton() devuelven la definición de los botones dependiendo de las condiciones:
// Returns an array of objects with the buttons for the command bar IF those buttons are visible function setToolbarCreateButton() { if (checkEditable(false)) return [{ name: "create" }]; else return null; }y
// Returns an array of objects with the buttons for the row IF those buttons are visible function setCommandRow() { var cmdRow = []; if (checkEditable(true)) cmdRow.push({ name: "edit" }); if (checkEditable(false)) cmdRow.push({name: "destroy" }); return cmdRow; }checkEditable() es, por supuesto, el método que determina si los botones de editar o destruir están disponibles o no. De esta manera, en lugar de hacer que los botones sean visibles o invisibles, creo los botones o no según las condiciones.