从数据库字段的值下拉

Jua*_*oig 2 google-app-maker

我有一个与数据过滤有关的问题。我有一个Google云端硬盘表来存储数据,并且我想在下拉列表中显示此数据源的一个字段,以便按该字段(国家/地区)进行过滤。

领域

下拉过滤器

问题在于此下拉过滤器仅显示列表当前页面上显示的国家/地区。例如,如果在第一页中的下拉列表中出现一个国家(泰国),我只会看到泰国。

例

如果我们移至列表的第二页,我们还有另外两个国家(西班牙和葡萄牙),那么下拉列表将仅显示西班牙和葡萄牙。我真正想要的是一个下拉列表,其中显示了所有国家/地区,无论它们是否不在当前页面上,但我都不知道如何解决。?

?这是“国家选择器”的配置:

例子4

在帮助中,据说我们应该使用@datasource.model.fields.COUNTRY.possibleValues,但是如果我将此参数用作Options,那么选择器中将不显示任何内容。

Appmaker帮助

我花了很多时间试图解决此问题,但找不到解决方案,我想与您核对这是一个问题还是我做错了什么...

你可以帮帮我吗?

Pav*_*nik 5

您正在为下拉列表和表格使用相同的数据源,并且#distinct()#sort()正在过滤已加载到浏览器的项目(与存储在数据库中的整个数据集相反)。

您需要为下拉菜单使用单独的数据源。至少有三种技术可以做到这一点:

可能的值

您可以预定义字段的允许值Country并使用它们在创建表单和表过滤中填充下拉选项,@datasource.model.fields.Country.possibleValues如您所提到的: 可能的值

为国家创建模型

通过为国家引入专用的相关模型,您可以获得以下好处:

  • 标准化数据(您不会多次存储同一国家/地区)
  • 您将能够使您的国家/地区清单保持整洁(使用当前方法,可能会在同一个国家/地区使用不同的拼写,例如“美国”,“美国”,“美国”等)
  • 应用程序用户在创建新记录时将能够从下拉列表中选择所需的国家(因为每次输入新记录时都容易出错)。
  • 您的下拉列表绑定将如下所示:
// for names
@datasources.Countries.items..Names

// for options
@datasources.Countries.items.._key

// for value
@datasource.query.filters.Country._key._equals
Run Code Online (Sandbox Code Playgroud)

创建计算模型

使用计算模型,您将能够从表格中挤出唯一的国家/地区值。您的服务器查询脚本看起来类似于:

function getUniqueCountries_() {
  var consumptions = app.models.Consumption.newQuery().run();
  var countries = [];

  consumptions.reduce(function (allCountries, consumption) {
    if (!allCountries[consumption.Country]) {
      var country = app.models.CountryCalc.newRecord();
      country.Name = consumption.Country;
      countries.push(country);
      allCountries[consumption.Country] = true;
    }
  }, {});

  return countries;
}
Run Code Online (Sandbox Code Playgroud)

但是,随着消耗表的增加,它可能会给您带来巨大的性能开销。在这种情况下,我宁愿研究Cloud SQLCalculated SQL模型的方向

注意:

我给出了一个相当广泛的答案,也涵盖了当字段选项的数量可以不受限制(与有限的国家数量相对)时的类似情况。