Мне нужно связать и обновить два разных источника данных в одном раскрывающемся списке.
Источники данных:
- device_info
- device_measurements
Dropdown:
Поскольку выбранный элемент должен служить параметром для запросов к источникам данных, первая сложность, с которой я столкнулся, заключалась в том, что мне не удалось связатьзначение раскрывающегося списка для двух источников данных.
Так и поступило следующим образом.
Значение раскрывающегося списка установлено на @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();
не сказал бы обновить таблицу).
Вопросы:
- AmЯ что-то не так делаю?
- Есть ли лучший способ добиться этого?
** UDPATE ** ![enter image description here](https://i.stack.imgur.com/StBa3.jpg)