Как связать два разных источника данных с общим выпадающим списком - PullRequest
0 голосов
/ 16 марта 2019

Мне нужно связать и обновить два разных источника данных в одном раскрывающемся списке.

Источники данных:

  • device_info
  • device_measurements

Dropdown:

  • device_list

Поскольку выбранный элемент должен служить параметром для запросов к источникам данных, первая сложность, с которой я столкнулся, заключалась в том, что мне не удалось связатьзначение раскрывающегося списка для двух источников данных.

Так и поступило следующим образом.

Значение раскрывающегося списка установлено на @models.device_info.datasources.device_info.properties.deviceId

Событие выпадающего onValueChange установлено на loadDeviceInformationDataSources();

определение loadDeviceInformation равно

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

Каждый источник данных имеет параметр deviceId (тип String) и ссылается на скрипт запроса:

  • Сценарий запроса device_info равен return getDeviceInformation(query);
  • Сценарий запроса device_measurements return getDeviceMeasurements(query);

И, наконец, следующие сценарии:

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

Для отображения данных я использую одну таблицу на источник данных.

Источник данных разработчикice_info правильно загружается каждый раз, когда я выбираю устройство в раскрывающемся списке, и обновляется соответствующая таблица.

Что касается источника данных device_measurements, источник данных загружается каждый раз, когда я выбираю устройство в раскрывающемся списке (я вижучто при входе в консоль) НО соответствующая таблица не обновляется (как если бы программный measurementsQuery.run(); не сказал бы обновить таблицу).

Вопросы:

  1. AmЯ что-то не так делаю?
  2. Есть ли лучший способ добиться этого?

** UDPATE ** enter image description here

...