Как добавить новые строки в таблицу Tabulator?
Когда я добавляю новые строки в Tabulator, я использую некоторый объект со значениями по умолчанию:
var defaults = { id: 11, country_id: 4 };
table.addRow( defaults );
table.addRow( defaults );
Но Tabulator использует этот объект для хранения данных. Здесь все строки ссылаются на одни и те же данные. Таким образом, при редактировании одной строки обновляется вся таблица.
Как воспроизвести: откройте скрипку JS и отредактируйте колонку страны
Как правильно добавить строки в Tabulator?
2 ответа
Решение
Проблема заключается в том, что объекты передаются по ссылке, если вы хотите передать один и тот же объект нескольким строкам, вам нужно его глубоко скопировать, чтобы разорвать ссылку, используя Object.assign
функция.
var defaults = { id: 11, country_id: 4 };
table.addRow(Object.assign({}, defaults));
table.addRow(Object.assign({}, defaults));
В качестве обходного пути я делаю следующее:
var defaults = { id: 11, country_id: 4 };
var newRow = {};
for (var attr in defaults) {
newRow[attr] = defaults[attr];
}
table.addRow( newRow );
newRow = {};
for (var attr in defaults) {
newRow[attr] = defaults[attr];
}
table.addRow( newRow );
newRow = {};
for (var attr in defaults) {
newRow[attr] = defaults[attr];
}
table.addRow( newRow );