Table 不使用手动保存模式更新
Table Not Updating With Manual Save Mode
所以我有一个显示条目的 table。用户点击一个按钮打开片段页面来编辑数据。
app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);
这部分工作正常。
我已将我的数据源更改为 手动保存模式 以便能够利用项目跟踪器示例中使用的 "email notification for changes" 功能。为了让用户可以进行更改,请点击保存(关闭)按钮,然后会发出一封显示更改的电子邮件。
问题是当用户关闭片段时,table 不会更新(它们具有相同的数据源)。当我处于自动保存模式时,我能够利用以下命令强制 table 重新加载以反映任何更改:
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();
不幸的是,当我使用上面的方法时出现以下错误并且 table 似乎在尝试重新加载时卡住了(微调器一直在旋转)。
"Cannot query records on models with changes."
我假设这可能是因为在尝试重新加载数据源之前数据源尚未完成保存新更改?
如何获得保存(关闭)按钮:
保存更改
关闭对话框
刷新 table 以反映更改?
感谢您的帮助。
您可以尝试在保存回调中刷新数据源(假设您实际上是在页面片段和页面之间共享数据源):
widget.datasource.saveChanges(function() {
widget.datasource.load();
app.closeDialog();
});
如果您的数据源在您有未保存的更改时尝试刷新,就会发生该错误。
我知道您的代码块在再次加载数据源之前调用客户端 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]);
}
我发现此方法比从客户端脚本操纵更改更可靠。
所以我有一个显示条目的 table。用户点击一个按钮打开片段页面来编辑数据。
app.datasources.SystemOrders.selectKey(widget.datasource.item._key);
app.showDialog(app.pageFragments.SystemOrders_Edit);
这部分工作正常。
我已将我的数据源更改为 手动保存模式 以便能够利用项目跟踪器示例中使用的 "email notification for changes" 功能。为了让用户可以进行更改,请点击保存(关闭)按钮,然后会发出一封显示更改的电子邮件。
问题是当用户关闭片段时,table 不会更新(它们具有相同的数据源)。当我处于自动保存模式时,我能够利用以下命令强制 table 重新加载以反映任何更改:
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();
不幸的是,当我使用上面的方法时出现以下错误并且 table 似乎在尝试重新加载时卡住了(微调器一直在旋转)。
"Cannot query records on models with changes."
我假设这可能是因为在尝试重新加载数据源之前数据源尚未完成保存新更改?
如何获得保存(关闭)按钮:
保存更改
关闭对话框
刷新 table 以反映更改?
感谢您的帮助。
您可以尝试在保存回调中刷新数据源(假设您实际上是在页面片段和页面之间共享数据源):
widget.datasource.saveChanges(function() {
widget.datasource.load();
app.closeDialog();
});
如果您的数据源在您有未保存的更改时尝试刷新,就会发生该错误。
我知道您的代码块在再次加载数据源之前调用客户端 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]);
}
我发现此方法比从客户端脚本操纵更改更可靠。