2013-10-15 43 views
2

在模型上的余烬指南灰烬数据,它说(1):使用WebSockets

Ember公司的数据还设计有流API,如socket.io,火力地堡,或WebSockets的工作。您可以打开一个套接字到您的服务器,并将更改记录发送到商店。

我试过编写一个使用websocket的自定义适配器,但我没有走得太远。我无法在任何地方找到任何工作示例。

这是我完全未完成的原型:

DS.WSAdapter = DS.Adapter.extend(Ember.Evented, { 

    websocket: undefined, 

    init: function() { 
     if(this.websocket === undefined) 
     { 
      this.websocket = new WebSocket('ws://localhost:8887'); 

      this.websocket.onopen = function(e) { 
       console.log("Connection established!"); 

      }; 
      this.websocket.onmessage = function(e) { 
       // What to do here? 
      }; 
     } 

     this._loadData(); 
    }, 

    //.... 

能有人为请WebSocket的适配器帮助我吗?

我的主要问题是我不知道websocket.onmessage()执行时该怎么办。我甚至无法访问商店(使用DS.get('defaultStore'))或任何东西

回答

1

我没有直接使用Ember中的套接字的经验,但是我最近完成了一个Ember Data + Firebase适配器,它应遵循非常类似的方法。

你应该,至少,可以使用它作为灵感:

https://github.com/sandersonet/ember-data-firebase

火力地堡确实从下面的插槽提供抽象的附加层,但这些方法都非常相似。

0

看一看http://emberjs.com/guides/models/frequently-asked-questions/#toc_how-do-i-inform-ember-data-about-new-records-created-on-the-backend

一些应用程序可能要在店里 不通过store.find请求记录添加或更新记录。要完成此操作,您可以使用DS.Store的push,pushPayload或更新方法。这是 对于具有通道的Web应用程序(如SSE或Web套接字)有用,以通知其在后端的新记录或更新记录。

基本上,你需要在你onmessage钩反序列化收到的数据和推新对象使用store.push('model', record)或替代方法的数据存储。

+0

您的链接似乎已损坏(重定向到404)。也许这是一个很好的替代链接? https://guides.emberjs.com/v2.5.0/models/pushing-records-into-the-store/ – iX3