Как добавить новые строки в таблицу 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 );
Другие вопросы по тегам