我应该使用App Maker的服务器脚本,计算所得的客户端还是关系来过滤显示数据

时间:2019-08-19 21:57:19

标签: google-app-maker

我认为我缺少如何过滤和显示App Maker数据的核心概念。

目标

1)我想维护两个手动模式的数据模型。

Persons:
  PrimaryEmail
  personName
Vehicles:
  PrimaryEmail
  vehicleColor

2)我想在同一页面上并排显示两个表。

在一个表中显示所有车辆,在第二个表中仅显示用户的车辆 PrimaryEmail 是他们共享的密钥。


我尝试过的东西

服务器脚本

此查询脚本的第三个数据源UserVehicles返回我要在第二个表中显示的记录。

function getUserVehicleData() {
  var uE = Session.getActiveUser().getEmail();
  var q = app.models.Vehicle.newQuery();
  q.filters.PrimaryEmail._equals = uE;
  var d = q.run();
  return d;
}

但是,我发现客户端有必要频繁调用app.datasources.UserVehicle.load();,但是即使第二张表也不会显示来自(表一使用Vehicle数据源的更新/添加的记录,表二是使用UserVehicles)。我认为我还需要在load()回调内部进行工作,但是我看不出如何告诉第二张表UserVehicles中有刷新的数据。

计算得出的客户

此选项听起来正确。我希望客户端查询服务器以获取车辆PrimaryEmail与当前用户匹配的记录。

我看不到如何在客户端上过滤来自服务器的记录。与服务器脚本API不同,var data = app.models.Vehicle.newQuery();不是有效的客户端脚本。因此,是否不将数据加载到要在客户端计算的脚本中循环/过滤/创建新记录的变量中?

关系

我复制了一个教程,并创建了人与车之间的一对多关系。这引入了围绕已弃用外键的错误。另外,我无法说明如何为当前用户将这种关系用于过滤器。 (我不是100%掌握UI)。

问题

我想了解如何显示更新和过滤后的数据以及应如何过滤该数据(服务器,客户端计算出的关系)。我必须缺少一些东西,这必须很简单。

1 个答案:

答案 0 :(得分:0)

已解决

我使用服务器脚本来解决这个问题。

function getUserVehicleData() {
  var uE = Session.getActiveUser().getEmail();
  var q = app.models.Vehicle.newQuery();
  q.filters.PrimaryEmail._equals = uE;
  var d = q.run();
  return d;
}

我缺少的那部分是客户端脚本。

app.pages.UserVehicles.createChildren();

没有它,UI将不会刷新列表以使用数据源中的更新数据。

谢谢马库斯!