У меня есть простой класс, Event
с вычисляемым свойством:Update Aurelia наблюдается свойство на изменении содержащегося массива
import moment from 'moment';
export class Event {
constructor(data) {
Object.assign(this, data);
}
get playedFromNow() {
return moment(this.CreateDate).fromNow();
}
}
playedFromNow
просто возвращает строку, основанную на CreateDate
собственности, как 7 minutes ago
.
Viewmodel получает массив событий, и представление отображает события. Массив обновляется через websockets каждый раз, когда происходит новое событие (каждые несколько минут).
<div repeat.for="event of events">
<div class="media-body">
<h4 class="media-heading">${event.title} <small>${event.playedFromNow}</small></h4>
</div>
</div>
И (отношение) ViewModel код:
let socket = io();
socket.on(`new-event`, (data) => {
this.events.unshift(new Event(data)); // add to the event array at the top
});
// subscribe
let subscription = bindingEngine.collectionObserver(this.events).subscribe();
// unsubscribe
subscription.dispose();
В настоящее время имущество загрязнен проверяется, что означает, что свойство проверяется и изменяется очень часто - это немного ненужных и Есть много событий, отображаемых на экране, поэтому меня беспокоит производительность с течением времени. Есть ли способ, с помощью которого я могу инициировать пересчет, основанный на привязке и обновлении кода в VM ?:
После вашего ответа и постановки 'signaler.signal ('new-event')' в моем веб-сокетном событии тоже очень хорошо работало. Спасибо! – conradj