Tengo la siguiente configuración de tabulador:
var table = new Tabulator("#data-table", { layout: "fitColumns", //fit columns to width of table columns: [ //Define Table Columns { title: "Name", field: "name", editor:"input" }, { title: "IP", field: "ip" }, ], index:"name" });Además, registro una función para insertar una nueva fila:
function insertRow(){ table.addData([{ name: "", ip: "", }], true).then(function(rows){ if (rows.length == 0) return; rows[0].getCell("name").edit(); }) } Cuando llamo a la función insertRow() , puede insertar una nueva fila en la tabla pero no abrir la edición de la primera celda.
Sin embargo, el siguiente código funciona:
if (rows.length == 0) return; setTimeout(function(){ rows[0].getCell("name").edit(); }, 100);En la documentación http://tabulator.info/docs/4.9/update ,
El método addData devuelve una promesa, esto se puede usar para ejecutar cualquier otro comando que deba ejecutarse después de que los datos se hayan cargado en la tabla. Al ejecutarlos en la promesa, se asegura de que solo se ejecuten después de que la tabla haya cargado los datos.
Entonces, parece que no podemos llamar a rows[0].getCell("name").edit() inmediatamente dentro de la promesa.
¿Es esto correcto?
¿Hay algún problema con mi código?
Si solo está agregando una fila, use la función addRow en lugar de la función addData :
table.addRow({name: "", ip: ""], true) .then(function(row){ rows.getCell("name").edit(); });