首页 文章

从数据库字段的值下拉

提问于
浏览
2

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

Field

Dropdown filter

问题是这个下拉过滤器只显示列表当前页面上显示的国家/地区 . 例如,如果在第一页显示下拉列表中的一个国家(泰国),我将只看到泰国 .

example

如果我们转到列表的第二页,我们还有另外两个国家(西班牙和葡萄牙),然后下拉列表只显示西班牙和葡萄牙 . 我真正想要的是一个显示所有国家的下拉列表,无论它们是否在当前页面上,但我不知道如何修复它 .

这是国家选择器的配置:

example4

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

Appmaker Help

我花了很多时间试图解决这个问题而且我找不到解决方案,我想和你核对一下这是一个问题还是我做错了什么......

你可以帮帮我吗?

1 回答

  • 4

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

    您需要为下拉列表提供单独的数据源 . 至少有三种技术可以做到这一点:

    Possible values

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

    Create model for countries

    通过为国家/地区引入专用related model,您可以获得以下好处:

    • 规范化数据(您不会多次存储同一个国家/地区)

    • 你'll be able to keep your countries list clean (with current approach there is possibility to have the same country with different spellings like '美国', '美国', '美国'等)

    • app用户在创建新记录时将能够从下拉列表中选择他们需要的国家/地区(反对每次为所有新记录输入错误) .

    • 您的下拉式绑定将如下这些简单:

    // for names
    @datasources.Countries.items..Names
    
    // for options
    @datasources.Countries.items.._key
    
    // for value
    @datasource.query.filters.Country._key._equals
    

    Create Calculated Model

    使用Calculated Model,您将能够从表中挤出唯一的国家/地区值 . 您的服务器查询脚本可能看起来类似于:

    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;
    }
    

    但是,随着您的消耗表的增长,它可以为您带来显着的性能开销 . 在这种情况下,我宁愿看看Cloud SQLCalculated SQL model的方向 .

    Note:

    我给出了一个非常广泛的答案,也涵盖了类似的情况,当时的选项数量可以是无限的(与有限的国家号码相对) .

相关问题