首页 > 解决方案 > 如何将两个不同的数据源绑定到一个公共下拉列表

问题描述

我需要将两个不同的数据源绑定并刷新到一个下拉列表。

数据源:

落下:

由于所选项目应作为查询数据源的参数,所以我遇到的第一个困难是我无法将下拉列表的值绑定到两个数据源。

接下来的事情也是如此。

下拉列表的值设置为@models.device_info.datasources.device_info.properties.deviceId

Dropdown 的 onValueChange 事件设置为loadDeviceInformationDataSources();

loadDeviceInformation 定义为

function loadDeviceInformationDataSources() {
  app.datasources.device_info.load();
}

每个数据源都有一个名为 deviceId(字符串类型)的参数并引用一个查询脚本:

最后,脚本是:

function getDeviceInformation(query) {
  var deviceId = query.parameters.deviceId;
  console.log('Get device information for:', deviceId);

  var deviceInfo = firestore.getDocument('devices/' + deviceId);

  var record = app.models.device_info.newRecord();
  record.name = deviceInfo.fields.name;
  record.online = deviceInfo.fields.online;
  record.type = deviceInfo.fields.type;
  record.brightness = deviceInfo.fields['state'].brightness;
  record.on = deviceInfo.fields['state'].on;

  var records = [];
  records.push(record);

  // Load measurements
  var measurementsQuery = app.models.device_measurements.newQuery();
  measurementsQuery.where = 'deviceId = :deviceId';
  measurementsQuery.parameters.deviceId = deviceId;
  measurementsQuery.run();

  return records;
}

function getDeviceMeasurements(query) {
  var deviceId = query.parameters.deviceId || 'device-01' ;
  var records = [];

  var deviceMeasurements = firestore.getDocuments('devices/' + deviceId + '/measurements');


  deviceMeasurements.map(function(measure) {
    var record = app.models.device_measurements.newRecord();
    record.timestamp = measure.fields.timestamp;
    record.intensity = measure.fields.intensity;
    records.push(record);
  });

  return records;
}

为了显示数据,我每个数据源使用一个表。

每次我在下拉列表中选择一个设备并刷新相关表时,都会正确加载数据源 device_info。

至于数据源device_measurements,每次我在下拉列表中选择一个设备时都会加载数据源(我可以在登录到控制台时看到)但是相关的表没有被刷新(就像程序measurementsQuery.run();不会告诉表刷新一样)。

问题:

  1. 难道我做错了什么?
  2. 有没有更好的方法来实现这一目标?

** UDPATE ** 在此处输入图像描述

标签: google-app-maker

解决方案


推荐阅读