Таблица не обновляется в ручном режиме сохранения

Итак, у меня есть таблица, в которой показаны записи. Пользователи нажимают кнопку, чтобы открыть страницу фрагмента для редактирования данных.

app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);

Эта часть работает нормально.

Я изменил свой источник данных на Ручной режим сохранения, чтобы иметь возможность использовать функции «уведомления об изменениях по электронной почте», которые используются в примере Project Tracker. Чтобы пользователь мог внести изменения, нажмите кнопку «Сохранить (закрыть)», и электронное письмо будет отправлено с указанием изменений.

Проблема в том, что когда пользователь закрывает фрагмент, таблица не обновляется (у них один и тот же источник данных). Когда я был в режиме автоматического сохранения, я мог использовать следующее, чтобы принудительно перезагрузить таблицу, чтобы она отражала любые изменения:

var datasource = app.datasources.SystemOrders_HideComplete;
datasource.load();
app.closeDialog();

Поэтому я решил, что мне просто нужно добавить widget.datasource.saveChanges(); вариант кнопки «Закрыть».

widget.datasource.saveChanges();
var datasource = app.datasources.SystemOrders_HideComplete;
    datasource.load();
    app.closeDialog();

К сожалению, когда я использую вышеизложенное, я получаю следующую ошибку, и кажется, что таблица застревает, пытаясь перезагрузить (спиннер продолжает вращаться).

"Невозможно запросить записи в моделях с изменениями."

Я предполагаю, что это может быть связано с тем, что источник данных не закончил сохранение нового изменения, прежде чем пытаться перезагрузить источник данных?

Как я могу иметь кнопку «Сохранить (закрыть)»:

Сохраните изменения

Закрыть диалог

Обновить таблицу, чтобы она отражала изменения?

Спасибо за помощь.


person Adam Bergeron    schedule 24.07.2017    source источник


Ответы (2)


Вы можете попытаться обновить источник данных в обратном вызове сохранения (при условии, что вы фактически делитесь источником данных между фрагментом страницы и страницей):

widget.datasource.saveChanges(function() {
  widget.datasource.load();
  app.closeDialog();
});
person Pavel Shkleinik    schedule 24.07.2017

Эта ошибка произойдет, если ваш источник данных пытается обновиться, пока у вас есть несохраненные изменения.

Я знаю, что ваш блок кода вызывает saveChanges на стороне клиента перед повторной загрузкой источника данных, но вам может потребоваться проверить, не перезагружается ли источник данных из другого места одновременно.

Если это не помогло, попробуйте передать значения серверному сценарию и сохраните изменения после назначения свойств, например:

Клиент:

function handleSuccess() {
  // ensures that records are saved, now reload
  app.models.YourModel.YourDatasource.load();
}

google.script.run.withSuccessHandler(handleSuccess).addItem(field_value1, field_value2, field_value3); 

Сервер:

function addItem(field_value1, field_value2, field_value3) {

 // create new items
 var newItem = app.models.YourModel.newRecord();

 // assign values
 newItem.field1 = field_value1; 
 newItem.field2 = field_value2; 
 newItem.field3 = field_value3; 

 // save
 app.saveRecords([newItem]);
}

Я считаю этот метод более надежным, чем манипулирование изменениями из клиентского сценария.

person Community    schedule 02.08.2017
comment
Обновлено, поскольку серверные функции могут вызываться асинхронно. - person ; 16.08.2017