Я новичок в NS и нуждаюсь в некоторой помощи, чтобы получить что-то, что должно быть простым, работающим.
Приложение, с которым я играю, - это просто простая система синхронизации: когда приложение запускается иНажата кнопка «Обновить» в пользовательском интерфейсе, она загружает (используя fetch) из API список аварийных сигналов (который представляет собой просто массив «секунд» для отсчета).
Как только у меня есть списокпосле загрузки я назначаю переменную в модели представления только что полученным данным.У меня есть просмотр списка, связанный с этой переменной.
Каждую секунду я уменьшаю все значения в модели представления, используя таймер.
Моя проблема в том, что просмотр списка не выглядитавтоматически обновляться с изменениями, которые я делаю в его источнике данных, который таймер обрабатывает каждую секунду.
Я предполагал, что если я связываю просмотр списка со значением в viewmodel (массив сигналов / секунд), представление будетизменяйте всякий раз, когда я обновляю любой из его связанных элементов (в этом случае, когда таймер уменьшает значение каждого аварийного сигнала).
Это не так;после первоначального заполнения представления списка оно просто статично, но таймер, безусловно, работает.
const ObservableArray = require("data/observable-array").ObservableArray;
const observableModule = require("data/observable");
const dialogsModule = require("ui/dialogs");
function AlarmsViewModel() {
const viewModel = observableModule.fromObject({
alarms: [],
intervalId: null,
refreshData() {
this.alarms = [];
if (this.intervalId) {
clearInterval(this.intervalId);
}
fetch(`http://localhost:3000/alarms`).then((response) => response.json()).then((res) => {
const alarms = res.alarms;
this.alarms = new ObservableArray(alarms);
this.intervalId = setInterval(() => {
this.alarms.forEach((alarm) => {
alarm--;
});
}, 1000);
}).catch(() => {
dialogsModule.alert({
title: "Oops!",
message: "An error occured connecting to the API.",
okButtonText: "Got it!"
});
});
}
});
return viewModel;
}
module.exports = AlarmsViewModel;
alarms.xml
<ActionBar title="Alarms" class="action-bar">
</ActionBar>
<StackLayout>
<Button text="Refresh" tap="{{ refreshData }}" />
<ListView items="{{ alarms }}">
<ListView.itemTemplate>
<Label text="{{ $value }}" class="ends-in"/>
</ListView.itemTemplate>
</ListView>
</StackLayout>
</Page>
То, что каждую секунду элементы списка отображаются в соответствии сизменения, внесенные в базовый источник данных.