bastante nuevo en el uso de tabulador, pero realmente me encanta por lo que he visto hasta ahora. Desafortunadamente, estoy atascado con el siguiente problema: quiero calcular la suma de algunas de las celdas en cada fila. Logró esto mediante el uso de un mutador. Además, el mutador también se activa después de que el usuario edita una celda mediante el uso de cellEdited con una función que usa row.update(). Todo funciona bien hasta que agrego un formateador: "enlace" a una de las columnas. De alguna manera, la generación de enlaces evita que el mutador funcione. Creo que esto tiene que ver con la secuencia de devoluciones de llamada, pero como todavía sé un poco sobre tabulador y js, eso es solo una suposición.
Aquí está mi generador de tablas (abreviado):
var table var tabledata = table_data var choices = [0, 1, 2, 3] var getUrl = function(cell){ var url_id = cell.getRow().getCell('id').getValue(); return "/xyz/" + url_id } var customMutatorSumCur = function(value, data, type, params, component){ return data.knowledge + data.commitment; } table = new Tabulator( "#ratings-table", { selectable:false, layout:"fitDataTable", data:tabledata, columns:[ {title:"id", field:"id", visible:false}, {title:"Name", field:"name", formatter:"link", formatterParams:{ labelField:"name", url:getUrl, }}, {title:"Knowledge", field:"knowledge", editor:"select", editorParams: {values:choices}, cellEdited:function(cell){ cell.getRow().update({points_cur:true})}}, {title:"Commitment", field:"commitment", editor:"select", editorParams:{values:choices}, cellEdited:function(cell){ cell.getRow().update({points_cur:true})}, {title:"Points", field:"points_cur", mutator:customMutatorSumCur}, ], );El enlace generado funciona bien, el valor en el campo "Puntos" es correcto al principio, pero no se actualiza en la edición de la celda. Si omito esta parte:
, formatter:"link", formatterParams:{ labelField:"name", url:getUrl,el valor de "Puntos" se actualiza correctamente después de cada edición de celda, pero, por supuesto, ya no tengo un enlace. Tal vez alguien pueda indicarme la dirección correcta en la que cometí un error y pueda ayudarme a encontrar una solución...
saludos, romano
Un formateador nunca evitará que se ejecute un mutador, son sistemas completamente separados y se llama al formateador cada vez que se actualiza un valor en esa celda.
El problema que tiene es que solo se llama al mutador en una columna cuando se actualiza su valor, en este caso, su columna mutada obtiene su valor de otras dos columnas, por lo que mientras esas columnas se actualizan, el valor mutado no es porque el mutador es no volvió a llamar.
Sugeriría llamar a la función de update en la fila de la función cellEdited en las columnas de name y knowledge , esto volverá a activar el mutador:
cell.getRow().update({"points_cur":true})También en una nota separada, esta línea es un poco innecesaria, no necesita recuperar la celda para obtener los datos:
cell.getRow().getCell('id').getValue();debería ser:
cell.getData().id;