有沒有一種方法可以用Ember.js來實現實時數據?在Ember.js路線中重新獲取模型數據
我在找的是能夠將更新和新記錄(而不是刪除)插入到以前返回的結果。
所以我們可以說我有路由器,看起來像這樣使得能夠排序和分頁(又名跳過):
App.Router.map(function() {
this.resource('messages', { path: '/messages/skip/:skip/sort/:sort/direction/:direction' });
});
App.MessagesRoute = Ember.Route.extend({
model: function(params) {
this.set('params', params);
return this.query();
},
query: function() {
var sort = {};
sort[this.get('params').sort] = parseInt(this.get('params').direction);
return App.Message.find({}, {
skip: this.get('params').skip,
sort: sort
});
},
setupController: function(controller, model) {
var self = this;
this._super(controller, model);
Ember.Instrumentation.subscribe('onMessage', {
before: function(name, timestamp, message) {
self.controller.set('content', self.query());
},
after: function() {}
});
},
});
這個偉大的工程 - 它排序,並在靜態意義上正確地跳過。
(注:我沒有使用灰燼數據 - 只是一組灰燼對象)
但是,消息不斷到來,我想這些消息的顯示,自動重新查詢新的消息,當他們到達。
我有一個WebSocket的,告訴我,當這種情況發生,並且工作正常,我使用Ember.Instrumentation基礎設施路由事件到setupController封我。但是當我做一個
this.controller.set('content', this.query());
在對這個事件重新加載的反應,內容都消失了。我究竟做錯了什麼?
上Ember.Route模型方法可以返回一個承諾,但如果這樣做了承諾路由器等待解決或致電setupController之前失敗()。控制器本身總是期望一個具體的模型,而不是一個承諾。 – nicknystrom