2013-06-12 34 views
6

有沒有一種方法可以用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()); 

在對這個事件重新加載的反應,內容都消失了。我究竟做錯了什麼?

回答

3

我終於明白了這一點,雖然我很喜歡一位燼專家告訴我爲什麼。

如果我使用的承諾,然後(),以獲得真正的結果,然後設置在控制器上,它的工作原理:

setupController: function(controller, model) { 
    var self = this; 
    this._super(controller, model); 
    Ember.Instrumentation.subscribe('onMessage', { 
     before: function(name, timestamp, message) { 
      var p = self.query(); 

      p.then(function(response) { 
       self.controller.set('content', response); 
      }); 
     }, 
     after: function() {} 
    }); 
}, 

我很想知道爲什麼 - 因爲我認爲灰燼可能需要承諾除了實際價值。也就是說,這個解決方案實際上更好,因爲在REST調用往返時沒有閃爍 - 數據只在完成時交換。

+0

上Ember.Route模型方法可以返回一個承諾,但如果這樣做了承諾路由器等待解決或致電setupController之前失敗()。控制器本身總是期望一個具體的模型,而不是一個承諾。 – nicknystrom

4

我想一個辦法是執行App.Message.find()定期 - 燼將處理你的視圖更新

window.setInterval(function(){App.Message.find()},1000); 

糾正我,如果我錯了 - 我仍然在學習燼

+0

對不起 - 我在我的第一篇文章過於簡化了情況。我有一個更復雜的查詢,只是一個簡單的查找所有,所以我不認爲這將工作。我編輯並擴展了我的問題。 – outside2344

相關問題