我的應用正在使用基於ember-phoenix的websocket服務將新記錄從API推送到商店。我希望這些新記錄在添加時在我的模板中呈現。在路由中使用store.query時通過websocket添加新數據
我在模型鉤子返回一個過濾查詢承諾的路線:
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
,則會呈現新記錄,但我希望我的路由僅基於日期查詢參數加載所有記錄的子集。
這似乎是我的唯一選擇是在將新記錄推送到商店時重新加載路線模型。有沒有可能從服務中做到這一點?如果不是,我可能想探索一種不同的方法嗎?
我Socket服務的相關部分如下:
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);
},
});
感謝您的詳細答覆!根據@xoma在上面發佈的回覆,我最終做了你在方案1中提出的建議,但由於你花時間爲將來的人們記錄它,所以我會給你信任。 –