У меня есть приложение, в котором я хотел бы иметь возможность брать столбцы из электронной таблицы Google и составлять список в таблице в моем приложении. Также я хотел бы иметь возможность удалять элементы из этой таблицы.
На данный момент я использую функцию библиотеки AMU AMU.deleteAll, все, что она делает, это
AMU.deleteAll = function(widget){
var records = widget.datasource.items;
records.forEach(function(record){
record._delete();
});
};
Итак, что происходит, когда у меня есть совершенно новая и пустая таблица, мое приложение может обновляться из моей электронной таблицы, когда я использую AMU.import.fromSpreadsheet (проверьте здесь полную библиотеку goo.gl/RkeqZw), оно возьмет все элементы из моей электронной таблицы и разместит их должным образом в моей таблице, после этого я могу использовать функцию удаления, чтобы удалить все элементы в моей таблице. Вот где все становится ужасно, когда я снова пытаюсь использовать функцию импорта, список заполняется пустыми записями, и если я пытаюсь использовать функцию удаления, я получаю сообщение об ошибке:
"Drive Table internal error. Record not found. Caused by: Execution Failed. More information: Object not found at path: camo0A_084fQ. (HTTP status code: 404) Error: Drive Table internal error. Record not found. at deleteAllData (ServerScript:232)"
Я не уверен, почему это происходит, мне кажется, что данные сохраняются, а функция удаления удаляет только значение, а не фактическую запись.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите удалить все элементы из своей модели, вы можете сделать один вызов сервера (код, который вы указали выше, действительно вызывает вызов для каждого отдельного элемента, загруженного на клиенте):
// server script to delete all records from model
function deleteAllRecordsFromModel() {
var allRecords = app.models.MyModel.newQuery().run();
app.deleteRecords(allRecords);
}
// client script to call server function
google.script.run
.withSuccessHandler(function() {
// TODO: Handle success (optional)
})
.withFailureHandler(function() {
// TODO: Handle error (optional)
})
.deleteAllRecordsFromModel();