Мое приложение использует службу websocket на основе ember-phoenix, чтобы выталкивать новые записи из API в магазин. Я бы хотел, чтобы эти новые записи отображались в моем шаблоне, когда они были добавлены.Добавление новых данных через websocket при использовании store.query в пути
У меня есть маршрут, где модель крюк возвращает фильтрованную обещание запроса:
import Ember from 'ember';
const {
get,
inject,
} = Ember;
export default Ember.Route.extend({
socket: inject.service(),
model(params) {
return this.store.query('my-model', {filter: {date: params.date}})
},
afterModel() {
get(this, 'socket').joinSchedule();
},
resetController() {
get(this, 'socket').leaveSchedule();
},
});
Когда новые записи помещаются в магазин через WebSocket, они не отображаются на моем шаблоне из-за того, как store.query
работ. Если я меняю store.query
на store.findAll
, будут отображаться новые записи, но я хочу, чтобы мой маршрут загружал только подмножество всех записей на основе параметра запроса даты.
Кажется, что мой единственный вариант - просто перезагрузить модель маршрута, когда новая запись будет перенесена в магазин. Возможно ли это сделать из службы? Если нет, есть ли другой подход, который я могу изучить?
Соответствующие части моей службы розетки ниже:
import Ember from 'ember';
import PhoenixSocket from 'phoenix/services/phoenix-socket';
const {
get,
inject,
} = Ember;
export default PhoenixSocket.extend({
session: inject.service(),
store: inject.service(),
joinSchedule() {
const channel = this.joinChannel(`v1:my-model`);
channel.on('sync', (payload) => this._handleSync(payload));
},
_handleSync(payload) {
get(this, 'store').pushPayload(payload);
},
});
Спасибо за подробный ответ! Я закончил делать то, что вы предложили в варианте 1, на основе ответа, который @xoma опубликовал выше, но я дам вам кредит, так как вы потратили время на его документирование для людей в будущем. –